powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / TEMP TABLE: Как лучше посупать в таком случае
17 сообщений из 17, страница 1 из 1
TEMP TABLE: Как лучше посупать в таком случае
    #39304565
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция ф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
TEMP TABLE: Как лучше посупать в таком случае
    #39304568
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинКакова best practice для таких случаев?Не копировать в другую СУБД ms-style. Тем более что и для ms временные таблицы, имея свои проблемы, уже давно не актуальны и используются по недоумию.
...
Рейтинг: 0 / 0
TEMP TABLE: Как лучше посупать в таком случае
    #39304614
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.Ролг ХупинКакова best practice для таких случаев?Не копировать в другую СУБД ms-style. Тем более что и для ms временные таблицы, имея свои проблемы, уже давно не актуальны и используются по недоумию.

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

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

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

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


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

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

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

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


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

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


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

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

ф2()
...

perform ф1

perform ф1


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

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

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

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

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

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

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

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

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

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

blahblahblah blahblahblah blahblahblah
blahblahblah blahblahblah blahblahblah
blahblahblah blahblahblah blahblahblah

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

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


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

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

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

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

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

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

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


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