PostgreSQL中的ALTER TRIGGER命令

时间:2016-06-26 04:42:10

标签: sql postgresql triggers ddl

我在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无法解释如何操作。

我想在不丢弃的情况下更改触发器。这可能吗?

2 个答案:

答案 0 :(得分:4)

抱歉,以这种方式无法改变触发器。 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;

答案 1 :(得分:0)

即将发布的 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();