我在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
无法解释如何操作。
我想在不丢弃的情况下更改触发器。这可能吗?
答案 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();