我正在做一个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);'