0

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

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

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

4

2 回答 2

2

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

查看and的功能和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;

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

于 2013-03-22T10:15:25.563 回答
0

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

于 2013-03-22T10:04:58.063 回答