Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / TEMP TABLE: Как лучше посупать в таком случае / 17 сообщений из 17, страница 1 из 1
06.09.2016, 16:30
    #39304565
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Есть функция ф1, в ней создаю и рабтю с временной таблицей

ф1()
CREATE TEMP TABLE temp_delete
(
id int,
name text
)ON COMMIT DROP

Все ок, создал, поработал, автоматом удалилась.

Но в такой ситуации

ф2()
...

perform ф1

perform ф1


получаю ошибку, что такая таблица уже существует.

сделал так: внутри ф1

CREATE TEMP TABLE IF NOT EXISTS temp_delete
(
id int,
name text
)ON COMMIT DROP

delete from temp_delete;

Но может есть более красивый ход? Какова best practice для таких случаев?
...
Рейтинг: 0 / 0
06.09.2016, 16:34
    #39304568
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Ролг ХупинКакова best practice для таких случаев?Не копировать в другую СУБД ms-style. Тем более что и для ms временные таблицы, имея свои проблемы, уже давно не актуальны и используются по недоумию.
...
Рейтинг: 0 / 0
06.09.2016, 17:28
    #39304614
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
p2.Ролг ХупинКакова best practice для таких случаев?Не копировать в другую СУБД ms-style. Тем более что и для ms временные таблицы, имея свои проблемы, уже давно не актуальны и используются по недоумию.

1. и что вместо временных таблиц? так чтобы можно было азполнить, апдейтнуть, выбрать из них?
2. даладно, прямо так категорично на все случаи жизни
...
Рейтинг: 0 / 0
06.09.2016, 20:13
    #39304711
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Ролг Хупин,

не используйте времянки в пг. учитесь модифицировать табличные наборы на проходе. (тейбл--ретурнинг ф-ями в т.ч.)

вот нет в пж табличных переменных. и старпёры ещё и упираются "не нужны". печаль. и тьху на них.

зы транкейт всегда лучше делета.


ЗЫ2: нужна расстрельная команда -- убивать мс--скльщиков, лезущих в пж
...
Рейтинг: 0 / 0
06.09.2016, 20:19
    #39304714
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
qwwqРолг Хупин,

не используйте времянки в пг. учитесь модифицировать табличные наборы на проходе. (тейбл--ретурнинг ф-ями в т.ч.)

вот нет в пж табличных переменных. и старпёры ещё и упираются "не нужны". печаль. и тьху на них.

зы транкейт всегда лучше делета.


ЗЫ2: нужна расстрельная команда -- убивать мс--скльщиков, лезущих в пж

данунах, надо только приветствовать и содействовать
...
Рейтинг: 0 / 0
06.09.2016, 20:50
    #39304730
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Ролг Хупиназполнитьза цать лет практики временные таблицы использовались только для etl, чтобы при загрузке больших пакетов производить очистку данных с использованием индексов. Но 1. использовались global temporary и, опять же, 2. это была специфика оракла, чтобы избежать бесполезного редо. Однопоточно используемые global temporary в случае pg вполне заменяют unlogged. Да и многопыточное использование не сложно решаемо.
...
Рейтинг: 0 / 0
06.09.2016, 21:20
    #39304739
pg_role
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Ролг ХупинВсе ок, создал, поработал, автоматом удалилась.


Избавляйтесь от времянок явно и сразу, как только они более не нужны. Правило одинаково, что для PG, что для MSSQL.

Ролг ХупинНо в такой ситуации

ф2()
...

perform ф1

perform ф1


Должно помочь, если у Вас еще осталось желание использовать их после всего выше сказанного.

qwwqЗЫ2: нужна расстрельная команда -- убивать мс--скльщиков, лезущих в пж
Да ваще жечь этих еретиков, инквизиции на них нет =)))
...
Рейтинг: 0 / 0
06.09.2016, 22:04
    #39304746
PgSQLanonymous3
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
pg_roleДолжно помочь, если у Вас еще осталось желание использовать их после всего выше сказанного.

И, кстати, вот тут TEMP TABLES тоже не работают:
https://www.postgresql.org/docs/9.6/static/hot-standby.html
...
Рейтинг: 0 / 0
09.09.2016, 23:24
    #39306925
aceton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Зачем людям голову морочите? Функционал временных таблиц ничем не заменить полностью, а во многих задачах вообще не обойтись без них. СТЕ - ни разу не замена, returning тоже. IF NOT EXISTS - нормальное решение специально для таких случаев.
Табличные переменные заработали здесь . До этого дополнения можно было пользоваться другими фишками для достижения эффекта табличных переменных. Над проблемой с репликацией занимаются . Были бы они не нужны - не занимались бы.
Что там в MS SQL теперь придумали, не знаю, но сомневаюсь, что MS в курсе, что их временные таблицы настолько никому не нужны :) Тем более, что СТЕ там работют кардинально иначе, нежели в postgresql.
...
Рейтинг: 0 / 0
09.09.2016, 23:35
    #39306928
aceton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
* Я, может, немного некорректно выразился - проблема не с репликацией как таковой, а с использованием временных таблиц на репликах, находящихся (ессесно) в режиме read-only. Если вы не пытаетесь в своих "читающих" запросах создавать временные таблицы, то проблема вас не касается.
...
Рейтинг: 0 / 0
09.09.2016, 23:56
    #39306934
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
aceton,

чо сказать то хотели ?

своими, т.с. словами , хехе
...
Рейтинг: 0 / 0
10.09.2016, 11:28
    #39307015
PgSQLanonymous3
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
acetonЗачем людям голову морочите? Функционал временных таблиц ничем не заменить полностью,
а во многих задачах вообще не обойтись без них.
В каких это "многих"? В самом деле интересно, я вот временами вообще забываю об их сущестовании...
acetonСТЕ - ни разу не замена, returning тоже.
Почему "ни разу"? Материализация-то происходит, что частично заменяет TEMP TABLE.

acetonНад проблемой с репликацией занимаются . Были бы они не нужны - не занимались бы.
Другими словами, сейчас этого нет, и писать, например, отчёты
с использованием временных таблиц и использовать на hot standby не получится. ;(

acetonТем более, что СТЕ там работют кардинально иначе, нежели в postgresql.
Это уж точно, настолько "иначе", что для рекурсивных нестандартный синтаксис,
к тому же они broken by design. ;)
...
Рейтинг: 0 / 0
10.09.2016, 20:48
    #39307105
aceton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
PgSQLanonymous3,

заменяет != частично заменяет
Как только понадобится что-то большее, чем просто материализация, сразу придем к временным таблицам.
create index, analyze, copy, сохранение данных в рамках сессии (например, при параллельной обработке очередей, где блокировок недостаточно по объективным причинам) - то, что сходу приходит в голову. Думаю, те, кто активно и разносторонне использует постгрес, привели бы много примеров, где без временных таблиц либо никак, либо очень плохо.

qwwq, в ваших задачах получается не использовать временные таблицы - отлично. Там, где можно обойтись - там, часто, лучше обойтись (и, скорее всего, быстрее). Но безапелляционно заявлять новичкам, что их не нужно использовать - это, наверное, неправильно?! Это незаменимый инструмент, и от него не просто не откажутся - его целенаправленно совершенствуют.

Если бы автор топика более детально раскрыл свой use-case, можно было бы порекомендовать какое-то конкретное решение. По крайней мере, в сферическом вакууме не вижу ничего костыльного в решении автора.
...
Рейтинг: 0 / 0
10.09.2016, 23:14
    #39307129
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
aceton,

blahblahblah blahblahblah blahblahblah
blahblahblah blahblahblah blahblahblah
blahblahblah blahblahblah blahblahblah

ну ваше пустозвонство мы наблюдаем уже 3--й псто
не надо ля лепить прилагательные
тут, ля люди конкретные, существенные:
когда очередь обрабатывается параллельно -- она зовётся уже не очередью
,например

и т.п.
т.ч. кончай валять дурочку -- пиши, что сказать хотел, на пальцах


норот же тут пишет не то, что времянки не нужны ващще, а что примерно в 100 случаях из 100, когда именно мс--скльщеку приходит в его мс--куэлью пропитанный моск идея поюзать времянку (т.е. практицки при любом расчете сложнее 1+1) -- задача в пж вполне решается без оной. и надо начинать с того, что пытаться проникнуться этой аксиомой, а не тащить изначально кривые паттерны в пж.

не говоря уже о том, что ни табличных переменных вы нам не показали (что такое сессионные переменные в пж известно ещё в 7.2, они там на pltcl например реализовывались парой ф--й get /set ) ни времянки на стендбаях реализованные
, а вот именно и только только то самое blahblahblah о них, которое лет 100 уже слышно.

короче, помойте рот от маркетоидного бреда и не пеньте тут людям мозги.
...
Рейтинг: 0 / 0
11.09.2016, 10:15
    #39307168
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
acetonЗачем людям голову морочите? Функционал временных таблиц ничем не заменить полностью, а во многих задачах вообще не обойтись без них. СТЕ - ни разу не замена, returning тоже. IF NOT EXISTS - нормальное решение специально для таких случаев.
Табличные переменные заработали здесь . До этого дополнения можно было пользоваться другими фишками для достижения эффекта табличных переменных. Над проблемой с репликацией занимаются . Были бы они не нужны - не занимались бы.
Что там в MS SQL теперь придумали, не знаю, но сомневаюсь, что MS в курсе, что их временные таблицы настолько никому не нужны :) Тем более, что СТЕ там работют кардинально иначе, нежели в postgresql.

Где про это можно почитать?
...
Рейтинг: 0 / 0
11.09.2016, 13:10
    #39307178
aceton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Ролг Хупин,

как вариант
Помимо этого, в постгресе можно писать внутри CTE по-началу неожиданные вещи:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
create table t as
select i from generate_series(10, 100, 10) as s(i);

with u as
(
	update t
	set i = i + 1
	where i <= 50
	returning i
),
i as
(
	insert into t
	select * from generate_series(110, 150, 10)
	returning i
),
wtf as
(
	update t
	set i = i + 5
	where i > 50
	-- returning?!!
),
fail as
(
	update t 
	set i = u.i + 2
	from u
	where t.i = u.i   -- здесь эффект от u еще недоступен в t *
)
select i from u
union all
select i from i;
-- select i from t;  -- *

select * from t order by i;

Развлекайтесь :)
...
Рейтинг: 0 / 0
11.09.2016, 17:34
    #39307232
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEMP TABLE: Как лучше посупать в таком случае
Ролг ХупинacetonЗачем людям голову морочите? Функционал временных таблиц ничем не заменить полностью, а во многих задачах вообще не обойтись без них. СТЕ - ни разу не замена, returning тоже. IF NOT EXISTS - нормальное решение специально для таких случаев.
Табличные переменные заработали здесь . До этого дополнения можно было пользоваться другими фишками для достижения эффекта табличных переменных. Над проблемой с репликацией занимаются . Были бы они не нужны - не занимались бы.
Что там в MS SQL теперь придумали, не знаю, но сомневаюсь, что MS в курсе, что их временные таблицы настолько никому не нужны :) Тем более, что СТЕ там работют кардинально иначе, нежели в postgresql.

Где про это можно почитать?

Нигде. Это какое-то дивное изобретение какой-то коммерческой фирмы. Они художники, они так видят.
Обратитесь к авторам напрямую.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / TEMP TABLE: Как лучше посупать в таком случае / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]