powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хороший тон создания временных таблиц в PostgreSQL
38 сообщений из 38, показаны все 2 страниц
Хороший тон создания временных таблиц в PostgreSQL
    #39607389
Bosyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Скажите, такая схема создания временной таблицы в PostgreSQL 10 имеет какие-то конкретные недостатки?

Create TEMP TABLE table_name as
select * from ...

Так код получается компактнее, чем сначала создавать таблицу, а потом делать insert в нее. Но есть опасения, что могут быть скрытые недостатки такого метода (какие-то блокировки в случае тяжелого select, на основе которого строится таблица и т.д.).

Спасибо за ваше мнение!
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607420
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bosyak,

хороший тон в пж -- избегать создания времянок.

по крайней мере на сегодняшний день

конечно всё по возможности, если уже никак -- то делайте.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607421
Bosyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моем случае без времянок вообще никак, и их много. Поэтому решил разобраться детальнее.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607431
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BosyakВ моем случае без времянок вообще никак, и их много. Поэтому решил разобраться детальнее.

вероятно это неверная проекция старого опыта на новые обстоятельства.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607586
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если только ради компактности кода, то не стоит.
Если есть другие цели - озвучьте.

"старый опыт" действительно сильно на это влияет.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607747
Bosyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что надо избегать времянок я услышал.
Скорость создания и заполнения таблиц примерно одинаковая
(create temp table -> insert into select и create temp table as select)

И все-таки какие проблемы меня ждут, если массово генерить времянки через create temp table as select? Так же интересно мнение админов PostgreSQL на этот счет.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607752
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bosyak,

Вы пытаетесь навязать нам свое видение решения какой-то, только вам известной, задачи. Может имеет смысл описать задачу полностью, чтобы можно было полноценно говорить о всех плюсах и минусах применяемых подходов?
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607770
Bosyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаBosyak,

Вы пытаетесь навязать нам свое видение решения какой-то, только вам известной, задачи. Может имеет смысл описать задачу полностью, чтобы можно было полноценно говорить о всех плюсах и минусах применяемых подходов?

Не пытаюсь, вам показалось) меня просто интересует технический ньанс. Из любопытства, если вам так угодно.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39607808
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bosyak,

можете и дальше упорствовать.... Но вы даже не рассказали - что после всех ваших манипуляций становиться с вашими временными таблицами? они удаляются? остаются в базе и используются повторно? пока ваш вопрос сродни такому: "Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит"(с)
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608044
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bosyak,
да делайте как получится, раз не хотите как надо

проблемы вас сами найдут и расскажут как правильно

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


возможно вы станете главным гуру по времянкам , дерзайте
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608062
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqBosyak,
да делайте как получится, раз не хотите как надо

проблемы вас сами найдут и расскажут как правильно

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


возможно вы станете главным гуру по времянкам , дерзайте

ёмко

зы. меня тоже касается, хочу избавиться от темп таблиц, а в некоторых случаях не вижу как.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608117
Skoffer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так а расскажите в чем конкретно проблема с временными таблицами?
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608153
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkofferТак а расскажите в чем конкретно проблема с временными таблицами?
да какие проблемы ?

конкретно проблема с любителями всё делать через времянки.
т.ч. бить их надо, пока маленькие.

а так-то проблем нет.

хотя на стендбае отчеты не будут считаться, если кто на времянках настрогал.

но так-то проблем нет -- есть бывшие мс-скуельщики, которые времянки лепят не думая. вот их всех прикопать в садике под грушей, и можно околачивать.

и да, тут поиск работает, если чо.


зы я сам во времянки счёт 1-с процки перетаскивал -- там вообще была песня -- прямо в живой табличке итерировали в пяток проходов себестоимости на тыщщи записей. в длинной транзе. других рукояток из 1С-кода попросту не торчало. пришлось вынести порнографию во времянку. или вылезать за рамки 1С--кода, что заведомо плохо -- я уйду а код останется.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608167
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skoffer,

Зачем гнать данные во временную таблицу, может всё обработать одним запросом?

Приведите конкретный пример задачи, которую вы решаете через временные таблиц — разговор будет более предметным.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608252
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovЗачем гнать данные во временную таблицу, может всё обработать одним запросом?
.
Ну например, когда надо сохранить/задокументировать промежуточный результат.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608270
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183vyegorovЗачем гнать данные во временную таблицу, может всё обработать одним запросом?
.
Ну например, когда надо сохранить/задокументировать промежуточный результат.
с этого момента попа дробнее пжалста.

задокументировать во времянке ? орригинально
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608520
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача?
Ночью производится некий расчет.
Некие промежуточные результаты сохраняются во временной таблице с уникальным именем.
По мере желания - чистят.
По необходимости - смотрят.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608531
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача?
Ночью производится некий расчет.
Некие промежуточные результаты сохраняются во временной таблице с уникальным именем.
По мере желания - чистят.
По необходимости - смотрят
.

если успевают и таблица еще жива
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608533
jan2ary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача?
Ночью производится некий расчет.
Некие промежуточные результаты сохраняются во временной таблице с уникальным именем.
По мере желания - чистят.
По необходимости - смотрят.Вы уверены, что понимаете предназначение и механику временных таблиц?

Код: plaintext
 Temporary tables  are automatically dropped  at the end of a session, or optionally at the end of the current transaction.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608536
Фотография MadeOfGlass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача?
Ночью производится некий расчет.
Некие промежуточные результаты сохраняются во временной таблице с уникальным именем .
По мере желания - чистят.
По необходимости - смотрят.

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

это какая-то долгоиграющая времянка.
таких тут не делают.

наверное вы анлоггед тейблы имеете в виду, а не temporary.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608788
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неверное.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608800
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был вопрос "Зачем гнать данные во временную таблицу, может всё обработать одним запросом?"
Соответственно ответ заключался в том, что иногда это нужно.
(Учитывался опыт работы на другой СУБД)
Другое дело, что в PostgreSQL несомненно это надо делать не через механизм временных таблиц.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39608936
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Был вопрос "Зачем гнать данные во временную таблицу, может всё обработать одним запросом?"
Соответственно ответ заключался в том, что иногда это нужно.
(Учитывался опыт работы на другой СУБД)
Другое дело, что в PostgreSQL несомненно это надо делать не через механизм временных таблиц.
ну нагребите ещё слов в кучку, неопределенный вы наш, авось смысл где-то не-то найдётся. не-то потеряется


повторяю вопрос применительно к "промежуточным результатам":

что мешает сохранить по мере "одного запроса" кучу уровней детализации (with ... insert 1...insert N) / итераций(with recursive), несомненно "не через механизм" , "иногда", когда "это нужно"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Хороший тон создания временных таблиц в PostgreSQL
    #39965456
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bosyak,

Как минимум есть одна большая проблема с временными таблицами, это разрастание pg_class и pg_attribute. С длинными транзакциями pg_attribute стала занимать 4 Гб вместо 40Мб. Что субъективно чревато более долгой подготовкой запросов к выполнению.

Можете подсказать как определить какая временная таблица создается чаще всего? Что бы можно было начать работы по выпиливанию.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #39965458
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swa111,

log_statement ddl включить и дальше по логу базы считать.
или pg_stat_statements track_utility включить и с его помощью.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40020207
Случайно набрёл на эту тему. Работаем с MS-SQL. Часто применяем такой подход:
Шаг 1. Во временные таблицы набиваем сырые данные (иногда их много).
Шаг 2. При необходимости с этими таблицами проводим какую-то обработку (как минимум синхронизацию ссылок между мастер-детейл).
Шаг 3. Отправляем запрос в котором: открываем транзакцию, переливаем данные в основные таблицы, закрываем транзакцию.

Т.к. из-за импортозамещения придется поддерживать и PG, то теперь в размышлениях...
Можно конечно под эти цели завести постоянные и внутри "разводить" по сессиями, но не хотелось бы.

Подскажите пожалуйста, где посмотреть какие у PG проблемы с временными таблицами. В гугле не банили и честно пытался поискать.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40020219
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий Зиновьев
Случайно набрёл на эту тему. Работаем с MS-SQL. Часто применяем такой подход:
Шаг 1. Во временные таблицы набиваем сырые данные (иногда их много).
Шаг 2. При необходимости с этими таблицами проводим какую-то обработку (как минимум синхронизацию ссылок между мастер-детейл).
Шаг 3. Отправляем запрос в котором: открываем транзакцию, переливаем данные в основные таблицы, закрываем транзакцию.

Т.к. из-за импортозамещения придется поддерживать и PG, то теперь в размышлениях...
Можно конечно под эти цели завести постоянные и внутри "разводить" по сессиями, но не хотелось бы.

Подскажите пожалуйста, где посмотреть какие у PG проблемы с временными таблицами. В гугле не банили и честно пытался поискать.


Для такой задачи и в pg временные таблицы вполне нормально подходят и используются.
Только нало в pg не забывать analyze временной таблицы делать после шага 1 (и если вы там меняли очень много данных внутри).

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


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40020277
Maxim Boguk, большое спасибо!
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40020405
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий Зиновьев
Работаем с MS-SQL. Часто применяем такой подход

А какой баг в MS SQL вы обходите таким кривым костылём?
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40020501
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Юрий Зиновьев
Работаем с MS-SQL. Часто применяем такой подход

А какой баг в MS SQL вы обходите таким кривым костылём?


а почему сразу баг то?
загрузка сырых данных сначала в временную таблицу это стандартная РЕКОМЕНДУЕМАЯ практика при ETL задачах на любой базе (что оракл что pg что mssql) ,
там чистка-преобразование-валидация и уже после - загрузка чистых данных в постоянные таблицы (там вполне 10% может остаться от того что залили).



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40020528
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже актуально PostGres в Azure
И тоже в мс-скл часто юзаел #Tmp таблицы
чаще всего когда сложная логика - то в SP разбивал логику на куски
#tmp1 , #Tmp1 , #tmp3 ...

(а иногда и глобальные ## чтобы видеть можно было ) - но это больше для ETL
чтобы видеть где и когда что упало и быстро догрзуить кусок

вопрос временные таблицы в Azure
не имеют никаких отличий от станд. постгреса ?

ps а вобще кто-то с PostGres Azure работает ?
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40020790
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk
загрузка сырых данных сначала в временную таблицу это стандартная РЕКОМЕНДУЕМАЯ практика при ETL задачах на любой базе (что оракл что pg что mssql) ,
там чистка-преобразование-валидация и уже после - загрузка чистых данных в постоянные таблицы (там вполне 10% может остаться от того что залили).

Ну, у ETL-то преобразование это T, которое стоит ещё до до L. Чистка и валидация это да, ништяк применение при загрузке данных извне. Но у меня почему-то создалось впечатление, что ТС грузит во временные таблицы данные из самой базы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Хороший тон создания временных таблиц в PostgreSQL
    #40132386
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже столкнулись с тем, что сильно разрослась в первую очередь pg_attribute и другие таблицы из pg_catalog. А какие альтернативы есть временным таблицам? Переменные не подходят. Требуется использование многоколоночных структур. Данные используются только в пределах транзакции, так что видны только данные, которые данной транзакцией вставлены. Пока заменили временные таблицы на постоянные unlogged с той же структурой, что была у временных. В продакшн пока не выкладывали. На тестовых средах таблицы занимают максимум 4 блока (32Kb). Не надо ли в таблицы добавлять колонки (и индексом по ней) с константами в пределах транзакции и фильтрация по этой колонке, для более быстрого доступа. Или при разростании таблицы до какого размера потребуется такая дополнительная колонка с индексом? Или она не поможет?
Массив структур вряд ли получится использовать, поскольку используется выборка по некоторым условиям, в том числе в соединении с другими таблицами
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40132461
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kr_Yury,

Массив структур вполне рабочий вариант, выборка по условиям и соединение с другими таблицами решается через unnest c WITH ORDINALITY. Работает хорошо до тех пор пока не нужно передавать массив в другие процедуры и сам массив не большого размера.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40132490
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swa111, спасибо.
В нашем случае временные таблицы содержат относительно мало данных. Попробую одну из них заменить на массив структур.
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40132678
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swa111
Kr_Yury,

Массив структур вполне рабочий вариант, выборка по условиям и соединение с другими таблицами решается через unnest c WITH ORDINALITY. Работает хорошо до тех пор пока не нужно передавать массив в другие процедуры и сам массив не большого размера.


А какая собственно проблема передать массив в другую процедуру то?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Хороший тон создания временных таблиц в PostgreSQL
    #40132680
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kr_Yury
Тоже столкнулись с тем, что сильно разрослась в первую очередь pg_attribute и другие таблицы из pg_catalog. А какие альтернативы есть временным таблицам? Переменные не подходят. Требуется использование многоколоночных структур. Данные используются только в пределах транзакции, так что видны только данные, которые данной транзакцией вставлены. Пока заменили временные таблицы на постоянные unlogged с той же структурой, что была у временных. В продакшн пока не выкладывали. На тестовых средах таблицы занимают максимум 4 блока (32Kb). Не надо ли в таблицы добавлять колонки (и индексом по ней) с константами в пределах транзакции и фильтрация по этой колонке, для более быстрого доступа. Или при разростании таблицы до какого размера потребуется такая дополнительная колонка с индексом? Или она не поможет? Масссив структур вряд ли получится использовать, поскольку используется выборка по некоторым условиям, в том числе в соединении с другими таблицами


Есть интересный вариант когда вы при создании коннекта создаёте временную таблицу 1 раз
и далее её используете до победы.
Если вы её сделаете с DELETE ROWS то она ещё и будет автоматически после транзакции очищаться.
При условии долгоживущих конектов к базе - это наверное самое простое решение не требующее серьёзных переделок бизнес-логики.

НО лучше конечно 32kb через массив стуктур (точнее типизированных row()) передавать а не через таблицы + unnest для разворота в таблицу.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Хороший тон создания временных таблиц в PostgreSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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