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

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

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

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

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

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

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

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

с 9.2

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


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