在我的 PostgreSQL 9.1 数据库中,我有多个表和一个触发器函数。
现在,我正在使用该触发器函数为每个表创建触发器。
这种方法工作正常。我的老板要求我通过重新使用触发器功能来创建触发器(仅一次)。我的数据库中的所有表都应该使用这个触发器函数。
在我的 PostgreSQL 9.1 数据库中,我有多个表和一个触发器函数。
现在,我正在使用该触发器函数为每个表创建触发器。
这种方法工作正常。我的老板要求我通过重新使用触发器功能来创建触发器(仅一次)。我的数据库中的所有表都应该使用这个触发器函数。
您可以在PostgreSQL的审计触发器示例中找到使用 PL/PgSQL 创建具有动态 SQL 的触发器的示例。相同的方法适用于任何其他 DDL。
查看and的功能和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 过程并将触发器创建代码移到其中