创建或替换触发器 postgres

新手上路,请多包涵

我想为 postgres 表“创建或替换”一个触发器。但是,没有这样的sql表达式。

我看到我可以先做一个“ DROP TRIGGER IF EXISTS ”( http://www.postgresql.org/docs/9.5/static/sql-droptrigger.html )。

我的问题是:

  1. 是否有比( DROP + CREATE 触发器)推荐/更好的选择
  2. 是否有没有这样的“创建或替换触发器”的原因(这可能意味着我不应该想要这样做)

请注意,oracle 中有一个“ Create or Replace Trigger ”( https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm )。然后,

  1. 是否为 Postgres 计划了这样的命令?

原文由 jbarrameda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 922
2 个回答

Postgresql 有事务 DDL,所以 BEGIN > DROP > CREATE > COMMIT 相当于 CREATE OR REPLACE

是一篇很好的文章,介绍了 postgre 的事务 DDL 与其他系统(例如 oracle)的比较

当前 postgres 计划的有关 触发器 的功能不包括添加 REPLACE 语法。

原文由 Krut 发布,翻译遵循 CC BY-SA 4.0 许可协议

从 PostgreSQL 14 开始, CREATE TRIGGER 现在也支持“ OR REPLACE

您现在可以使用 CREATE OR REPLACE TRIGGER ... (而不是首先使用 DROP TRIGGER IF EXISTS )。

这似乎也可以明智地处理分区表的情况:

在分区表上创建行级触发器将导致在其每个现有分区上创建相同的“克隆”触发器;并且稍后创建或附加的任何分区也将具有相同的触发器。如果子分区上已经存在名称冲突的触发器,则会发生错误,除非使用 CREATE OR REPLACE TRIGGER,在这种情况下,该触发器将替换为克隆触发器。当一个分区与其父分区分离时,它的克隆触发器将被删除。

另外值得注意的是:

目前,约束触发器不支持 OR REPLACE 选项。

原文由 Bruno 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进