Может ли функция PostgreSQL (PL / pg SQL) запускать функцию в зависимости от специальных переменных OLD, NEW, TG_OP et c. быть чистым и, следовательно, НЕПРЕРЫВНЫМ? - PullRequest
0 голосов
/ 09 мая 2020

В руководстве PostgreSQL описаны СТАРЫЙ, НОВЫЙ, TG_OP и c. как "специальные переменные", доступные для процедур триггеров PL / pg SQL. Он также определяет функцию IMMUTABLE как «гарантированно возвращающую одни и те же результаты при одних и тех же аргументах навсегда».

Могут ли эти специальные переменные рассматриваться как процедура триггера аргументы в контексте оценки функции чистота? Или они больше похожи на переменные, внешние по отношению к функции, так что любая процедура триггера, зависящая от них, никогда не должна быть помечена как IMMUTABLE?

1 Ответ

0 голосов
/ 09 мая 2020

OLD, NEW, TG_OP больше похожи на глобальные переменные, которые доступны внутри запущенной функции. Вы не определяете их явно как аргументы:

CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER AS... 
   ...
   IF TG_OP = 'INSERT' AND NEW.field_foo =....

Функция foo не имеет определенных аргументов, однако доступны TG_OP и NEW.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...