PostgreSQL触发器创建

12

如果触发器不存在,我该如何创建触发器?

当我尝试使用“CREATE OR REPLACE”语句时,会出现语法错误,因此我想寻找一种测试触发器是否存在的方法。

我可以通过执行“SELECT * FROM pg_trigger”来查询所有触发器,但我相信有更适合的方法。

谢谢。


1
提及你正在使用的PostgreSQL版本总是一个好主意。 - user533832
2个回答

21

Postgres 可以有条件地删除触发器 - 请参阅文档。在创建触发器之前这样做,然后它总是有效的。

DROP TRIGGER IF EXISTS mytrigger ON mytable;

正如Jack在评论中指出的那样,这个功能只在8.2版本之后才可用;尽管已经过去了四年多,但它应该在您的版本中可用。


@El Yobo,值得一提的是,这个功能是在8.2中引入的。 - user533832
@El Yobo 很难确定还有多少人在使用8.1 - 我认为需要考虑的一个关键因素是它是RHEL5上的默认安装程序,我怀疑这意味着它的使用仍然很普遍。 - user533832
1
这是一个很好的删除答案,但在创建触发器之前如何检查触发器是否存在才是我真正想知道的。 - reza
1
@reza:如果你总是先删除它,那么你就能够安全地创建它。这样可以确保在你尝试创建它时它从未存在过。 - El Yobo
@ElYobo,但是如果我不想删除触发器,因为它现在正在运行怎么办?如果我删除它,那么在重新创建之前,功能将会丢失,对吧?这似乎不是解决问题的好方法。 - Kirill G.
显示剩余2条评论

1
CREATE TRIGGER (NameOfTrigger) AFTER INSERT OR UPDATE ON (NameOfTable)   

DROP TRIGGER IF EXISTS (NameOfTrigger) ON (NameOfTable);

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