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