当我创建一个表时执行触发器。

23

我想知道在PostgreSQL系统表上的触发器是否可以在创建表时执行

我需要在数据库中的每个表上添加2个函数,并且我希望能够动态地完成它

谢谢

3个回答

19

可以使用事件触发器来完成此操作:

CREATE OR REPLACE FUNCTION on_create_table_func()
RETURNS event_trigger AS $$
BEGIN
    -- your code here
END
$$
LANGUAGE plpgsql;

CREATE EVENT TRIGGER
on_create_table ON ddl_command_end
WHEN TAG IN ('CREATE TABLE')
EXECUTE PROCEDURE on_create_table_func();

请注意,没有直接在新创建的表上执行任何查询的方法,甚至无法获取其名称。 我不知道您所说的“在每个表中添加2个函数”的含义,因为函数不属于特定的表,但如果您需要对新表执行特定操作,则可能不适合您。


16

1
你正在寻找“DDL触发器”。它们在PostgreSQL中没有实现。你也不能向系统表添加触发器。看看这个论坛帖子:

添加ddl审计触发器


@JotaBe 此链接已失效。 - jlandercy
现在有事件触发器了。https://www.postgresql.org/docs/13/event-triggers.html - thesmart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接