Я делаю базу данных 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);'