在plpgslq中的execute语句中使用行集

时间:2018-12-02 08:15:04

标签: postgresql plpgsql database-trigger

我必须使用触发器来记录数据库中的删除。登录表与原始表相同,外加日期和时间字段。

所有表的操作都相同,除了记录该表的表名

begin
    insert into log.table_name
    select old.*, now();

    return old;
end

我想将表名作为参数。但是,那当然不行

begin
    insert into TG_ARGV[0]
    select old.*, now();

    return old;
end

要使用此功能,您需要输入一个字符串

begin
    execute format('insert into %L '
        'select old.*, now()', TG_ARGV[0]);

    return old;
end

但是由于使用了OLD.*

,因此无法正常工作

我的问题是,有没有一种方法可以将表名作为参数并保持对old的调用。很明显,我可以使用CASE,但是我不想这样做,因为触发函数将变得非常大,将来将很难维护。

0 个答案:

没有答案