Получить строку запроса в каскадном триггере - PullRequest
0 голосов
/ 03 января 2019

Я делаю базу данных PostgreSQL, у которой есть управляющая таблица, созданная и принадлежащая роли разработчика. Эта таблица имеет регистр изменений в определенных таблицах, у меня есть еще одна таблица для записи изменений в первой управляющей таблице, которой владеет только суперпользователь кластера.

Когда я делаю изменение в обычной таблице, запускается триггер, и запрос регистрируется в управляющей таблице с помощью current_query(), который доступен внутри триггера, когда изменение регистрируется в управляющей таблице, запускается второй триггер. и аналогичная запись сделана во второй управляющей таблице, я также использую current_query(), но захваченная строка является самой внешней инструкцией SQL. Я оставил код, чтобы лучше объяснить, что я хочу сделать.

create table regular_table (id int not null);
create table first_control (q text);
create table second_control (q text);

create function first_trigger_f() returns trigger as $$
begin
    insert into first_control(q) values (current_query());
    return new;
end
$$ language plpgsql;

create function second_trigger_f() returns trigger as $$
begin
    insert into second_control(q) values (current_query());
    return new;
end
$$ language plpgsql;

create trigger first_insert after insert on regular_table execute procedure first_trigger_f();
create trigger second_insert after insert on first_control execute procedure second_trigger_f();

insert into regular_table(id) values(1337);

Я ожидаю, что выход select * from second_control; будет

'insert into first_control(q) values (current_query());'

но на самом деле это

'insert into regular_table(id) values(1337);'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...