【问题标题】:ALTER TRIGGER command in PostgreSQLPostgreSQL 中的 ALTER TRIGGER 命令
【发布时间】:2016-10-28 08:44:30
【问题描述】:

我在一个 Postgres 9.3 数据库中存在一个触发器,定义如下:

CREATE TRIGGER trig
  AFTER UPDATE OR DELETE
  ON tab2
  FOR EACH ROW
  EXECUTE PROCEDURE proc3();

我想将触发器更改为:

AFTER INSERT OR UPDATE OR DELETE

The manual on ALTER TRIGGER 没有解释怎么做。

我想更改触发器而不丢弃它。这可能吗?

【问题讨论】:

    标签: sql postgresql triggers ddl


    【解决方案1】:

    抱歉,无法以这种方式更改触发器。 triggers 不存在 OR REPLACE 子句。然而,这很少会成为问题,因为在 postgresql 中,DDL 语句可以包装在事务中。

    BEGIN;
    DROP TRIGGER IF EXISTS trig on tab2;
    CREATE TRIGGER trig
      AFTER INSERT OR UPDATE OR DELETE
      ON tab2
      FOR EACH ROW
      EXECUTE PROCEDURE proc3();
    
    COMMIT;
    

    【讨论】:

    【解决方案2】:

    PostgreSQL 即将推出的版本将支持CREATE OR REPLACE 语法:

    CREATE OR REPLACE TRIGGER 将创建新触发器或替换现有触发器

    要替换现有触发器的当前定义,请使用 CREATE OR REPLACE TRIGGER,指定现有触发器的名称和父表。所有其他属性都被替换。

      CREATE OR REPLACE TRIGGER trig
      AFTER INSERT OR UPDATE OR DELETE
      ON tab2
      FOR EACH ROW
      EXECUTE PROCEDURE proc3();
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2010-12-11
      • 2021-08-01
      相关资源
      最近更新 更多