powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / запрос к таблице внутри её же триггера
8 сообщений из 8, страница 1 из 1
запрос к таблице внутри её же триггера
    #39470694
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно имеет место быть попытка миграции с Sybase ASA на PostgreSQL.
В ASA есть такая фича когда из триггера таблицы скажем "before insert" можно
делать запрос к этой же таблицы и даже делать в неё же insert иди update.
Понятно что фича мягко говоря странноватая с точки зрения СУБД,
но в системе благодаря неграмотным программерам используется активно.
вопрос:
В PostgreSQL это как-то возможно делать?
Уж больно не хочется вот прямо сейчас до кучи ещё и приложение пилить.
...
Рейтинг: 0 / 0
запрос к таблице внутри её же триггера
    #39470726
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnnиз триггера таблицы скажем " before insert" можно
делать запрос к этой же таблицы и даже делать в неё же insert иди update.
запрос и апдейт можно.
insert только в " after insert" -- триггере
/*update только в " after update" -- триггере*/

но можете ещё помедитировать над вьюхами-над-таблицами и instead of триггерами. хотя вьюхи в пж лучше не надо. совсем. (если система нестатична и развивается)
...
Рейтинг: 0 / 0
запрос к таблице внутри её же триггера
    #39470746
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,
Спасибо
...
Рейтинг: 0 / 0
запрос к таблице внутри её же триггера
    #39470801
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnnqwwq,
Спасибо
не за что.

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

с не очень давних времен (кажется с 8--й или 9-й мажорной) есть некая переменная "глубины вызова" (на вскидку не вспомню -- сам никогда не пользовался, за ненадобностью, авось сами найдете, или ОЛЛ подскажет). тонкостей использования по понятной причине уже не помню. поищите
...
Рейтинг: 0 / 0
запрос к таблице внутри её же триггера
    #39470832
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

с последним (переменной) -- кажется аберрация памяти. у меня бывает.

вот конкретное правило :
https://postgrespro.ru/docs/postgresql/9.6/trigger-definition.html Если триггерная функция выполняет команды SQL, эти команды могут заново запускать триггеры. Это известно как каскадные триггеры. Прямых ограничений на количество каскадных уровней не существует. Вполне возможно, что каскадные вызовы приведут к рекурсивному срабатыванию одного и того же триггера. Например, в триггере INSERT может выполняться команда, которая добавляет строку в эту же таблицу, тем самым опять вызывая триггер на INSERT. Обязанность программиста не допускать бесконечную рекурсию в таких случаях.
...
Рейтинг: 0 / 0
запрос к таблице внутри её же триггера
    #39470974
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqвот конкретное правило :
https://postgrespro.ru/docs/postgresql/9.6/trigger-definition.html
Если триггерная функция выполняет команды SQL, эти команды могут заново запускать триггеры. Это известно как каскадные триггеры. Прямых ограничений на количество каскадных уровней не существует. Вполне возможно, что каскадные вызовы приведут к рекурсивному срабатыванию одного и того же триггера. Например, в триггере INSERT может выполняться команда, которая добавляет строку в эту же таблицу, тем самым опять вызывая триггер на INSERT. Обязанность программиста не допускать бесконечную рекурсию в таких случаях.

поможет: pg_trigger_depth()
...
Рейтинг: 0 / 0
запрос к таблице внутри её же триггера
    #39471020
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поможет: pg_trigger_depth()[/quot]

снкс, что напомнили
не переменная ( 20559829 ), а ф--я
https://www.postgresql.org/docs/10/static/release-9-2.html

с 9.2

но лучше писать код не нуждающийся в костылях
...
Рейтинг: 0 / 0
запрос к таблице внутри её же триггера
    #39471345
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq, без костылей писать - это да. Да и триггеры лучше без рекурсии писать. Оракул например такое прямо запрещает. Но поскольку приложение уже имеет место быть и перелопачивать его а ну нах, то имеем что имеем. А функция и в самом деле очень полезная.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / запрос к таблице внутри её же триггера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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