powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временные таблицы: the best practice
23 сообщений из 23, страница 1 из 1
Временные таблицы: the best practice
    #39547270
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(Переезжаю с SQL Server)

Какая best practice использования временных таблиц?
Например,
есть функция, в которой создается временная таблица
1. с проверкой, если не существует, иначе удаляю все записи из неё
2. если существует, удаляю и создаю

Что будет, если функция будте вызвана одновременно разными клиентами? Будет ли эта таблица видна другим клиентам?
Можно ли/нужно ли пытаться заменять работу с временными таблицами на работу с чем-то другим? массивами?
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547359
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин(Переезжаю с SQL Server)

Какая best practice использования временных таблиц?
Например,
есть функция, в которой создается временная таблица
1. с проверкой, если не существует, иначе удаляю все записи из неё
2. если существует, удаляю и создаю

Что будет, если функция будте вызвана одновременно разными клиентами? Будет ли эта таблица видна другим клиентам?
Можно ли/нужно ли пытаться заменять работу с временными таблицами на работу с чем-то другим? массивами?

Временная таблица не видна из других сессий.
Для хранения временных данных ВНУТРИ хранимки лучше не использовать временные таблицы.

PS: я пока не видел задач кроме сложной очень аналитики (где индексы надо делать на временные таблицы и analyze) где было бы использовать временные таблицы.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547395
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупин(Переезжаю с SQL Server)

Какая best practice использования временных таблиц?
Например,
есть функция, в которой создается временная таблица
1. с проверкой, если не существует, иначе удаляю все записи из неё
2. если существует, удаляю и создаю

Что будет, если функция будте вызвана одновременно разными клиентами? Будет ли эта таблица видна другим клиентам?
Можно ли/нужно ли пытаться заменять работу с временными таблицами на работу с чем-то другим? массивами?

Временная таблица не видна из других сессий.
Для хранения временных данных ВНУТРИ хранимки лучше не использовать временные таблицы.

PS: я пока не видел задач кроме сложной очень аналитики (где индексы надо делать на временные таблицы и analyze) где было бы использовать временные таблицы.

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

"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись?
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547443
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинMaxim Bogukпропущено...


Временная таблица не видна из других сессий.
Для хранения временных данных ВНУТРИ хранимки лучше не использовать временные таблицы.

PS: я пока не видел задач кроме сложной очень аналитики (где индексы надо делать на временные таблицы и analyze) где было бы использовать временные таблицы.

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

"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись?

Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами).
А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547460
queezy relax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Bogukлучше в массивах держать, временные таблицы дорогие очень.

Можно еще наверное with использовать.


Или он очень дорогой?
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547464
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись?
В MS SQL временные таблицы обычно используются вместо курсоров, которые там безбожно тормозят. В PgSQL этот workaround не нужен.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547466
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
queezy relaxMaxim Bogukлучше в массивах держать, временные таблицы дорогие очень.

Можно еще наверное with использовать.


Или он очень дорогой?

А чем (с вашей точки зрения) WITH лучше/хуже чем просто подзапрос в скобках?
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547501
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупинпропущено...


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

"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись?

Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами).
А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень.

даладно, "абсолютно любая"
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547507
PgSQLanonymous3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупиндаладно, "абсолютно любая" Так покажите контрпример. ;)
Под "динамическим SQL", я так понимаю, имелся в виду dynamic resultset.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547508
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинMaxim Bogukпропущено...


Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами).
А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень.

даладно, "абсолютно любая"

sql (с рекурсивными запросами) - тью́ринг-по́лный.
Так что да, любая.

Выглядеть конечно может коряво но сделать можно все.
Для примера что можно сделать см например https://www.slideshare.net/pgdayasia/how-to-teach-an-elephant-to-rocknroll
от начала и до конца.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547517
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

offtop

обратил внимание, что агрегатов по ренджам нету. и мултиренджа, как рез-та агрегирования, тоже в типах не видно. (в сп-гистах агрегаты по геометриям есть, но есть ли "слипающиеся мультиренджи/и т.п. многомерности --не помню)

как агрегировать мультирендж на проходе скл-м надо подумать. по курсору это просто довольно получалось.

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


отсутствие табличных переменных в плпгскл -- недоработка пж. имхо.

а матрички хорошо в пайтоне щёлкать, похоже. numpy, scipy --вот это всё. но на прод пайтон ставить стремно.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547531
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупинпропущено...


даладно, "абсолютно любая"

sql (с рекурсивными запросами) - тью́ринг-по́лный.
Так что да, любая.

Выглядеть конечно может коряво но сделать можно все.
Для примера что можно сделать см например https://www.slideshare.net/pgdayasia/how-to-teach-an-elephant-to-rocknroll
от начала и до конца.

20832709 -- постановка, ожидающая героя.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547533
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqMaxim Bogukпропущено...


sql (с рекурсивными запросами) - тью́ринг-по́лный.
Так что да, любая.

Выглядеть конечно может коряво но сделать можно все.
Для примера что можно сделать см например https://www.slideshare.net/pgdayasia/how-to-teach-an-elephant-to-rocknroll
от начала и до конца.

20832709 -- постановка, ожидающая героя.

будет время - подумаю над.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547556
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупин,

offtop

обратил внимание, что агрегатов по ренджам нету. и мултиренджа, как рез-та агрегирования, тоже в типах не видно. (в сп-гистах агрегаты по геометриям есть, но есть ли "слипающиеся мультиренджи/и т.п. многомерности --не помню)

как агрегировать мультирендж на проходе скл-м надо подумать. по курсору это просто довольно получалось.

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


отсутствие табличных переменных в плпгскл -- недоработка пж. имхо.

а матрички хорошо в пайтоне щёлкать, похоже. numpy, scipy --вот это всё. но на прод пайтон ставить стремно.

оффтоп к оффтопу + словоблудие, если просто:

У меня есть
объект->1:N->метаданные->таблицы с метаданными

функция, параметром в которую идет хмл (ДНФ) с параметрами поиска типа:
поле метаданных-тип-операция-значение
...
Операция: =, !=,<,>, like, not like, (fts)
Поле метаданных:прикладное поле, размазанное по нескольким таблицам, в зависимости от типа данных, от того, можэно ли там искать полнотекстово и т.д.
И т.д.
Не хочу двигать часть функционала на клиент, считаю это неправильным, потому всё начинается с разборки хмл и затем в цикле поиск по всем таблицам и как результат возврат списка объектов, у которых метаданные удовлетворяют критериям поиска.

Я могу согласиться, что наверное можно всё грёбнуть запросом*, но в данном случае не вижу как, а вот с временными таблицами/переменными/массивами - вижу
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39547574
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

sql-м пошиваете из метадата окончательный скл. если тип фиксированный -- так его и открываете прямо из хранимки.

в случае еава с произвольным числом полей на выходе можете в ф--ии отпрепарить (в плпгскд--execute -е) безпараметрический препаред , и вторым стейтментом того же запроса (первым прошла упомянутая хранимочка) вытянуть этот препаред на клаента. 1С-ка вон на мб-ы текста запросы шить не стесняется.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39550232
yooo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупинпропущено...


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

"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись?

Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами).
А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень.
Да вы это 1с скажите с их монструозными запросами :). Лучше бы они хранимки делали.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39550693
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Bogukqueezy relaxпропущено...


Можно еще наверное with использовать.


Или он очень дорогой?

А чем (с вашей точки зрения) WITH лучше/хуже чем просто подзапрос в скобках?\
with материализуется. Ну и кстати чем по-вашему это лучше/хуже временной таблицы.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39550834
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakMaxim Bogukпропущено...


А чем (с вашей точки зрения) WITH лучше/хуже чем просто подзапрос в скобках?\
with материализуется. Ну и кстати чем по-вашему это лучше/хуже временной таблицы.

with лучше чем temp table - нет изнасилования pg_catalog и связанных с этим overhead и неработоспособности на репликах
temp table лучше чем with - так как это честная таблица то на нее можно добавлять индексы при необходимости и главное можно делать analyze (что позволяет делать разумные планы для сложной аналитики в ряде случаев)
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39550869
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а еще как на счет простоты построения плана для запроса с 50-ю with?
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39550871
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovРолг Хупин"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись?
В MS SQL временные таблицы обычно используются вместо курсоров, которые там безбожно тормозят. В PgSQL этот workaround не нужен.
в PgSQL изобрели курсоры работающие со скоростью SQL ??
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39551038
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durak, почитайте про WITH RECURSIVE -)
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39551394
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LegushkaIvan Durak, почитайте про WITH RECURSIVE -)
пардон, где курсоры, а где with recursive.
Это раз. А два - почитайте про бест практис оптимизации рекурсивных запросов.
...
Рейтинг: 0 / 0
Временные таблицы: the best practice
    #39551622
Victor Nevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
....
решайте по мере возможностей топологи сети ...

стендбай - временным таблицам - нет!

курсоры .... можно ... огласите весь список .... все параметры ... железо, OS, объём данных ... да много чего нужно учесть ....
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временные таблицы: the best practice
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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