【发布时间】:2018-12-12 20:06:01
【问题描述】:
我想知道在我创建表的时候是否可以执行PostgreSQL系统表上的触发器
我需要在我的数据库的每个表上添加 2 个函数,并且我想动态地完成它
谢谢
【问题讨论】:
标签: postgresql triggers ddl-trigger
我想知道在我创建表的时候是否可以执行PostgreSQL系统表上的触发器
我需要在我的数据库的每个表上添加 2 个函数,并且我想动态地完成它
谢谢
【问题讨论】:
标签: postgresql triggers ddl-trigger
我知道这是一个老问题,但现在它已在 9.3 版中实现,或者至少部分实现 http://www.postgresql.org/docs/9.3/static/event-trigger-definition.html
【讨论】:
这可以通过event trigger 来完成:
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 个函数”是什么意思,因为函数不属于特定表,但是如果您需要执行特定于新表的操作,这可能不适合您。
【讨论】:
您正在寻找“DDL 触发器”。它们没有在 PostgreSQL 中实现。您也不能将触发器添加到系统表。看看这个论坛条目:
【讨论】: