在我的PostgreSQL 9.1数据库中,我有多个表和一个触发器功能。
现在我正在使用该触发器函数为每个表创建触发器。
这种方法工作正常。我的老板要求我通过重复使用该触发功能来共同创建触发器(只有一次)。一个触发器函数应该被我的数据库中的所有表使用。
答案 0 :(得分:2)
您可以在PostgreSQL的Audit Trigger示例中找到使用PL / PgSQL创建动态SQL触发器的示例。相同的方法适用于任何其他DDL。
查看函数audit.audit_table
并使用format
和EXECUTE
。
也就是说,需要在程序上创建表可以(但并非总是)表示可疑的模式设计。
创建表的动态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过程并在其中移动触发器创建代码