在级联触发器中获取查询的字符串

时间:2019-01-03 05:01:08

标签: database postgresql triggers

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

0 个答案:

没有答案