【问题标题】:execute a trigger when I create a table创建表时执行触发器
【发布时间】:2018-12-12 20:06:01
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: postgresql triggers ddl-trigger


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这可以通过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 个函数”是什么意思,因为函数不属于特定表,但是如果您需要执行特定于新表的操作,这可能不适合您。

      【讨论】:

        【解决方案3】:

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

        Adding ddl audit trigger

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-16
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 2014-02-02
        • 2016-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多