|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Всем привет! Скажите, такая схема создания временной таблицы в PostgreSQL 10 имеет какие-то конкретные недостатки? Create TEMP TABLE table_name as select * from ... Так код получается компактнее, чем сначала создавать таблицу, а потом делать insert в нее. Но есть опасения, что могут быть скрытые недостатки такого метода (какие-то блокировки в случае тяжелого select, на основе которого строится таблица и т.д.). Спасибо за ваше мнение! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2018, 16:56 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Bosyak, хороший тон в пж -- избегать создания времянок. по крайней мере на сегодняшний день конечно всё по возможности, если уже никак -- то делайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2018, 17:41 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
В моем случае без времянок вообще никак, и их много. Поэтому решил разобраться детальнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2018, 17:44 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
BosyakВ моем случае без времянок вообще никак, и их много. Поэтому решил разобраться детальнее. вероятно это неверная проекция старого опыта на новые обстоятельства. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2018, 17:57 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Если только ради компактности кода, то не стоит. Если есть другие цели - озвучьте. "старый опыт" действительно сильно на это влияет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 06:52 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
То, что надо избегать времянок я услышал. Скорость создания и заполнения таблиц примерно одинаковая (create temp table -> insert into select и create temp table as select) И все-таки какие проблемы меня ждут, если массово генерить времянки через create temp table as select? Так же интересно мнение админов PostgreSQL на этот счет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 11:52 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Bosyak, Вы пытаетесь навязать нам свое видение решения какой-то, только вам известной, задачи. Может имеет смысл описать задачу полностью, чтобы можно было полноценно говорить о всех плюсах и минусах применяемых подходов? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 11:56 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Щукина АннаBosyak, Вы пытаетесь навязать нам свое видение решения какой-то, только вам известной, задачи. Может имеет смысл описать задачу полностью, чтобы можно было полноценно говорить о всех плюсах и минусах применяемых подходов? Не пытаюсь, вам показалось) меня просто интересует технический ньанс. Из любопытства, если вам так угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 12:19 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Bosyak, можете и дальше упорствовать.... Но вы даже не рассказали - что после всех ваших манипуляций становиться с вашими временными таблицами? они удаляются? остаются в базе и используются повторно? пока ваш вопрос сродни такому: "Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит"(с) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 13:05 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Bosyak, да делайте как получится, раз не хотите как надо проблемы вас сами найдут и расскажут как правильно просто люди, любящие плодить времянки в пж долго не живут -- некому вам рассказать, как класть грабли лучше возможно вы станете главным гуру по времянкам , дерзайте ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 18:07 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
qwwqBosyak, да делайте как получится, раз не хотите как надо проблемы вас сами найдут и расскажут как правильно просто люди, любящие плодить времянки в пж долго не живут -- некому вам рассказать, как класть грабли лучше возможно вы станете главным гуру по времянкам , дерзайте ёмко зы. меня тоже касается, хочу избавиться от темп таблиц, а в некоторых случаях не вижу как. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 18:32 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Так а расскажите в чем конкретно проблема с временными таблицами? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 19:49 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
SkofferТак а расскажите в чем конкретно проблема с временными таблицами? да какие проблемы ? конкретно проблема с любителями всё делать через времянки. т.ч. бить их надо, пока маленькие. а так-то проблем нет. хотя на стендбае отчеты не будут считаться, если кто на времянках настрогал. но так-то проблем нет -- есть бывшие мс-скуельщики, которые времянки лепят не думая. вот их всех прикопать в садике под грушей, и можно околачивать. и да, тут поиск работает, если чо. зы я сам во времянки счёт 1-с процки перетаскивал -- там вообще была песня -- прямо в живой табличке итерировали в пяток проходов себестоимости на тыщщи записей. в длинной транзе. других рукояток из 1С-кода попросту не торчало. пришлось вынести порнографию во времянку. или вылезать за рамки 1С--кода, что заведомо плохо -- я уйду а код останется. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 21:04 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Skoffer, Зачем гнать данные во временную таблицу, может всё обработать одним запросом? Приведите конкретный пример задачи, которую вы решаете через временные таблиц — разговор будет более предметным. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2018, 21:40 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
vyegorovЗачем гнать данные во временную таблицу, может всё обработать одним запросом? . Ну например, когда надо сохранить/задокументировать промежуточный результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2018, 05:13 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
982183vyegorovЗачем гнать данные во временную таблицу, может всё обработать одним запросом? . Ну например, когда надо сохранить/задокументировать промежуточный результат. с этого момента попа дробнее пжалста. задокументировать во времянке ? орригинально ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2018, 08:06 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача? Ночью производится некий расчет. Некие промежуточные результаты сохраняются во временной таблице с уникальным именем. По мере желания - чистят. По необходимости - смотрят. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2018, 14:55 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
982183А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача? Ночью производится некий расчет. Некие промежуточные результаты сохраняются во временной таблице с уникальным именем. По мере желания - чистят. По необходимости - смотрят . если успевают и таблица еще жива ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2018, 15:16 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
982183А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача? Ночью производится некий расчет. Некие промежуточные результаты сохраняются во временной таблице с уникальным именем. По мере желания - чистят. По необходимости - смотрят.Вы уверены, что понимаете предназначение и механику временных таблиц? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2018, 15:20 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
982183А как иначе подтвердить тот многоступенчатый результат, который получился, если возникает такая задача? Ночью производится некий расчет. Некие промежуточные результаты сохраняются во временной таблице с уникальным именем . По мере желания - чистят. По необходимости - смотрят. кхм, а обычная таблица вместо временной в данной ситуации чем не угодила? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2018, 15:22 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
982183, это какая-то долгоиграющая времянка. таких тут не делают. наверное вы анлоггед тейблы имеете в виду, а не temporary. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2018, 16:19 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
неверное. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 02:19 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Был вопрос "Зачем гнать данные во временную таблицу, может всё обработать одним запросом?" Соответственно ответ заключался в том, что иногда это нужно. (Учитывался опыт работы на другой СУБД) Другое дело, что в PostgreSQL несомненно это надо делать не через механизм временных таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 04:27 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
982183Был вопрос "Зачем гнать данные во временную таблицу, может всё обработать одним запросом?" Соответственно ответ заключался в том, что иногда это нужно. (Учитывался опыт работы на другой СУБД) Другое дело, что в PostgreSQL несомненно это надо делать не через механизм временных таблиц. ну нагребите ещё слов в кучку, неопределенный вы наш, авось смысл где-то не-то найдётся. не-то потеряется повторяю вопрос применительно к "промежуточным результатам": что мешает сохранить по мере "одного запроса" кучу уровней детализации (with ... insert 1...insert N) / итераций(with recursive), несомненно "не через механизм" , "иногда", когда "это нужно" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2018, 11:57 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Bosyak, Как минимум есть одна большая проблема с временными таблицами, это разрастание pg_class и pg_attribute. С длинными транзакциями pg_attribute стала занимать 4 Гб вместо 40Мб. Что субъективно чревато более долгой подготовкой запросов к выполнению. Можете подсказать как определить какая временная таблица создается чаще всего? Что бы можно было начать работы по выпиливанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 22:14 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Swa111, log_statement ddl включить и дальше по логу базы считать. или pg_stat_statements track_utility включить и с его помощью. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 22:18 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Случайно набрёл на эту тему. Работаем с MS-SQL. Часто применяем такой подход: Шаг 1. Во временные таблицы набиваем сырые данные (иногда их много). Шаг 2. При необходимости с этими таблицами проводим какую-то обработку (как минимум синхронизацию ссылок между мастер-детейл). Шаг 3. Отправляем запрос в котором: открываем транзакцию, переливаем данные в основные таблицы, закрываем транзакцию. Т.к. из-за импортозамещения придется поддерживать и PG, то теперь в размышлениях... Можно конечно под эти цели завести постоянные и внутри "разводить" по сессиями, но не хотелось бы. Подскажите пожалуйста, где посмотреть какие у PG проблемы с временными таблицами. В гугле не банили и честно пытался поискать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 07:56 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Юрий Зиновьев Случайно набрёл на эту тему. Работаем с MS-SQL. Часто применяем такой подход: Шаг 1. Во временные таблицы набиваем сырые данные (иногда их много). Шаг 2. При необходимости с этими таблицами проводим какую-то обработку (как минимум синхронизацию ссылок между мастер-детейл). Шаг 3. Отправляем запрос в котором: открываем транзакцию, переливаем данные в основные таблицы, закрываем транзакцию. Т.к. из-за импортозамещения придется поддерживать и PG, то теперь в размышлениях... Можно конечно под эти цели завести постоянные и внутри "разводить" по сессиями, но не хотелось бы. Подскажите пожалуйста, где посмотреть какие у PG проблемы с временными таблицами. В гугле не банили и честно пытался поискать. Для такой задачи и в pg временные таблицы вполне нормально подходят и используются. Только нало в pg не забывать analyze временной таблицы делать после шага 1 (и если вы там меняли очень много данных внутри). Проблемы начинаются когда через временные таблицы начинают OLTP-like задачи решать создавая и удаляя их сотнями в секунду (и используя фактически как замену переменным уровня сессии). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 09:03 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Maxim Boguk, большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 11:18 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Юрий Зиновьев Работаем с MS-SQL. Часто применяем такой подход А какой баг в MS SQL вы обходите таким кривым костылём? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 14:51 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Юрий Зиновьев Работаем с MS-SQL. Часто применяем такой подход А какой баг в MS SQL вы обходите таким кривым костылём? а почему сразу баг то? загрузка сырых данных сначала в временную таблицу это стандартная РЕКОМЕНДУЕМАЯ практика при ETL задачах на любой базе (что оракл что pg что mssql) , там чистка-преобразование-валидация и уже после - загрузка чистых данных в постоянные таблицы (там вполне 10% может остаться от того что залили). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 17:21 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
тоже актуально PostGres в Azure И тоже в мс-скл часто юзаел #Tmp таблицы чаще всего когда сложная логика - то в SP разбивал логику на куски #tmp1 , #Tmp1 , #tmp3 ... (а иногда и глобальные ## чтобы видеть можно было ) - но это больше для ETL чтобы видеть где и когда что упало и быстро догрзуить кусок вопрос временные таблицы в Azure не имеют никаких отличий от станд. постгреса ? ps а вобще кто-то с PostGres Azure работает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2020, 18:07 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Maxim Boguk загрузка сырых данных сначала в временную таблицу это стандартная РЕКОМЕНДУЕМАЯ практика при ETL задачах на любой базе (что оракл что pg что mssql) , там чистка-преобразование-валидация и уже после - загрузка чистых данных в постоянные таблицы (там вполне 10% может остаться от того что залили). Ну, у ETL-то преобразование это T, которое стоит ещё до до L. Чистка и валидация это да, ништяк применение при загрузке данных извне. Но у меня почему-то создалось впечатление, что ТС грузит во временные таблицы данные из самой базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 14:43 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Тоже столкнулись с тем, что сильно разрослась в первую очередь pg_attribute и другие таблицы из pg_catalog. А какие альтернативы есть временным таблицам? Переменные не подходят. Требуется использование многоколоночных структур. Данные используются только в пределах транзакции, так что видны только данные, которые данной транзакцией вставлены. Пока заменили временные таблицы на постоянные unlogged с той же структурой, что была у временных. В продакшн пока не выкладывали. На тестовых средах таблицы занимают максимум 4 блока (32Kb). Не надо ли в таблицы добавлять колонки (и индексом по ней) с константами в пределах транзакции и фильтрация по этой колонке, для более быстрого доступа. Или при разростании таблицы до какого размера потребуется такая дополнительная колонка с индексом? Или она не поможет? Массив структур вряд ли получится использовать, поскольку используется выборка по некоторым условиям, в том числе в соединении с другими таблицами ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 00:45 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Kr_Yury, Массив структур вполне рабочий вариант, выборка по условиям и соединение с другими таблицами решается через unnest c WITH ORDINALITY. Работает хорошо до тех пор пока не нужно передавать массив в другие процедуры и сам массив не большого размера. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 11:37 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Swa111, спасибо. В нашем случае временные таблицы содержат относительно мало данных. Попробую одну из них заменить на массив структур. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 13:49 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Swa111 Kr_Yury, Массив структур вполне рабочий вариант, выборка по условиям и соединение с другими таблицами решается через unnest c WITH ORDINALITY. Работает хорошо до тех пор пока не нужно передавать массив в другие процедуры и сам массив не большого размера. А какая собственно проблема передать массив в другую процедуру то? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 21:05 |
|
Хороший тон создания временных таблиц в PostgreSQL
|
|||
---|---|---|---|
#18+
Kr_Yury Тоже столкнулись с тем, что сильно разрослась в первую очередь pg_attribute и другие таблицы из pg_catalog. А какие альтернативы есть временным таблицам? Переменные не подходят. Требуется использование многоколоночных структур. Данные используются только в пределах транзакции, так что видны только данные, которые данной транзакцией вставлены. Пока заменили временные таблицы на постоянные unlogged с той же структурой, что была у временных. В продакшн пока не выкладывали. На тестовых средах таблицы занимают максимум 4 блока (32Kb). Не надо ли в таблицы добавлять колонки (и индексом по ней) с константами в пределах транзакции и фильтрация по этой колонке, для более быстрого доступа. Или при разростании таблицы до какого размера потребуется такая дополнительная колонка с индексом? Или она не поможет? Масссив структур вряд ли получится использовать, поскольку используется выборка по некоторым условиям, в том числе в соединении с другими таблицами Есть интересный вариант когда вы при создании коннекта создаёте временную таблицу 1 раз и далее её используете до победы. Если вы её сделаете с DELETE ROWS то она ещё и будет автоматически после транзакции очищаться. При условии долгоживущих конектов к базе - это наверное самое простое решение не требующее серьёзных переделок бизнес-логики. НО лучше конечно 32kb через массив стуктур (точнее типизированных row()) передавать а не через таблицы + unnest для разворота в таблицу. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 21:09 |
|
|
start [/forum/topic.php?all=1&fid=53&tid=1993666]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
others: | 252ms |
total: | 407ms |
0 / 0 |