Вы можете использовать Postgres 'SET
или SET LOCAL
команду для эмуляции Oracle SET_CONTEXT()
, например. следующим образом:
SET LOCAL audit.AUDIT_USER = 'whatever-you-like';
-- alternative:
SELECT set_config('audit.AUDIT_USER', 'whatever-you-like', true);
Затем вы можете получить это значение, используя current_setting () :
SELECT current_setting('audit.AUDIT_USER', true);
(Второй аргумент, true
, позволит избежать исключения, если перед запросом параметр не был SET
, а вместо него вернуть NULL
. Аргумент был введен в Postgres 9.6, см. Этот вопрос для , как сделать это в Postgres 9.1 + .)
Я также создал демонстрационный механизм механизма аудита , использующий SET LOCAL
и current_setting()
для реализации аудита на уровне БД с данными, предоставленными приложением.
Наконец, некоторые важные детали, упомянутые в документации, выделено мной:
Эффекты SET LOCAL действуют только до конца текущей транзакции , независимо от того, зафиксированы они или нет.
(Напротив, значения, установленные с SET
, имеют сессионную область.)