将单个触发器过程应用于许多不同的表

时间:2013-03-22 10:01:59

标签: postgresql triggers postgresql-9.1

在我的PostgreSQL 9.1数据库中,我有多个表和一个触发器功能。

现在我正在使用该触发器函数为每个表创建触发器。

这种方法工作正常。我的老板要求我通过重复使用该触发功能来共同创建触发器(只有一次)。一个触发器函数应该被我的数据库中的所有表使用。

2 个答案:

答案 0 :(得分:2)

您可以在PostgreSQL的Audit Trigger示例中找到使用PL / PgSQL创建动态SQL触发器的示例。相同的方法适用于任何其他DDL。

查看函数audit.audit_table并使用formatEXECUTE

也就是说,需要在程序上创建表可以(但并非总是)表示可疑的模式设计。

创建表的动态SQL的简单示例:

CREATE OR REPLACE FUNCTION demo_dynamic_table(tablename text) RETURNS void AS $$                                                                                      
BEGIN                                                                                                                                                                          
    EXECUTE format('CREATE TABLE %I (id serial primary key);', tablename);
END;
$$ LANGUAGE plpgsql;

相同的方法适用于触发器创建等。

答案 1 :(得分:0)

您可以为表创建创建PL / pgSQL过程并在其中移动触发器创建代码