PostgreSQL 中的 ALTER TRIGGER 命令

ALTER TRIGGER command in PostgreSQL

我在 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 没有解释怎么做。

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

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

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

CREATE OR REPLACE TRIGGER will either create a new trigger, or replace an existing trigger

To replace the current definition of an existing trigger, use CREATE OR REPLACE TRIGGER, specifying the existing trigger's name and parent table. All other properties are replaced.

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