在创建表时执行触发器

时间:2012-03-23 13:06:51

标签: postgresql triggers ddl-trigger

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

我需要在我的数据库的每个表上添加2个函数,我想动态地执行它

由于

3 个答案:

答案 0 :(得分:12)

我知道这是一个老问题,但现在已经在9.3版本中实现,或者至少部分实现了 http://www.postgresql.org/docs/9.3/static/event-trigger-definition.html

答案 1 :(得分:7)

可以使用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个功能"由于函数不属于特定的表,但如果您需要执行特定于新表的操作,则可能不适合您。

答案 2 :(得分:2)

您正在寻找“DDL触发器”。它们没有在PostgreSQL中实现。您也无法向系统表添加触发器。看看这个论坛条目:

Adding ddl audit trigger