|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
Собственно имеет место быть попытка миграции с Sybase ASA на PostgreSQL. В ASA есть такая фича когда из триггера таблицы скажем "before insert" можно делать запрос к этой же таблицы и даже делать в неё же insert иди update. Понятно что фича мягко говоря странноватая с точки зрения СУБД, но в системе благодаря неграмотным программерам используется активно. вопрос: В PostgreSQL это как-то возможно делать? Уж больно не хочется вот прямо сейчас до кучи ещё и приложение пилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 09:36 |
|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
sergnnиз триггера таблицы скажем " before insert" можно делать запрос к этой же таблицы и даже делать в неё же insert иди update. запрос и апдейт можно. insert только в " after insert" -- триггере /*update только в " after update" -- триггере*/ но можете ещё помедитировать над вьюхами-над-таблицами и instead of триггерами. хотя вьюхи в пж лучше не надо. совсем. (если система нестатична и развивается) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 10:27 |
|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
qwwq, Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 10:56 |
|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
sergnnqwwq, Спасибо не за что. вероятно я слегка соврал. в принципе все попытки что--то сделать (и в триггере тоже) порождают срабатывание соотв. триггеров на изменение. если те есть. с не очень давних времен (кажется с 8--й или 9-й мажорной) есть некая переменная "глубины вызова" (на вскидку не вспомню -- сам никогда не пользовался, за ненадобностью, авось сами найдете, или ОЛЛ подскажет). тонкостей использования по понятной причине уже не помню. поищите ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 11:39 |
|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
qwwq, с последним (переменной) -- кажется аберрация памяти. у меня бывает. вот конкретное правило : https://postgrespro.ru/docs/postgresql/9.6/trigger-definition.html Если триггерная функция выполняет команды SQL, эти команды могут заново запускать триггеры. Это известно как каскадные триггеры. Прямых ограничений на количество каскадных уровней не существует. Вполне возможно, что каскадные вызовы приведут к рекурсивному срабатыванию одного и того же триггера. Например, в триггере INSERT может выполняться команда, которая добавляет строку в эту же таблицу, тем самым опять вызывая триггер на INSERT. Обязанность программиста не допускать бесконечную рекурсию в таких случаях. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 11:55 |
|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
qwwqвот конкретное правило : https://postgrespro.ru/docs/postgresql/9.6/trigger-definition.html Если триггерная функция выполняет команды SQL, эти команды могут заново запускать триггеры. Это известно как каскадные триггеры. Прямых ограничений на количество каскадных уровней не существует. Вполне возможно, что каскадные вызовы приведут к рекурсивному срабатыванию одного и того же триггера. Например, в триггере INSERT может выполняться команда, которая добавляет строку в эту же таблицу, тем самым опять вызывая триггер на INSERT. Обязанность программиста не допускать бесконечную рекурсию в таких случаях. поможет: pg_trigger_depth() ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 14:25 |
|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
поможет: pg_trigger_depth()[/quot] снкс, что напомнили не переменная ( 20559829 ), а ф--я https://www.postgresql.org/docs/10/static/release-9-2.html с 9.2 но лучше писать код не нуждающийся в костылях ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2017, 15:15 |
|
запрос к таблице внутри её же триггера
|
|||
---|---|---|---|
#18+
qwwq, без костылей писать - это да. Да и триггеры лучше без рекурсии писать. Оракул например такое прямо запрещает. Но поскольку приложение уже имеет место быть и перелопачивать его а ну нах, то имеем что имеем. А функция и в самом деле очень полезная. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2017, 10:50 |
|
|
start [/forum/topic.php?fid=53&tid=1996452]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 160ms |
0 / 0 |