PostgreSQL中的ALTER TRIGGER命令

7

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

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

我想把触发器更改为以下内容:
AFTER INSERT OR UPDATE OR DELETE

关于ALTER TRIGGER的手册没有解释如何进行操作。

我想修改触发器而不是删除它,这是否可能?

2个回答

8
抱歉,无法以这种方式更改触发器。触发器不存在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
“DROP TRIGGER” 需要指定父表。 - Erwin Brandstetter
你说得对,@ErwinBrandstetter 完全忽略了那个。 - e4c5

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接