首页 > 解决方案 > 更新 BEFORE DELETE 触发器中的行

问题描述

简而言之:我需要更新BEFORE DELETE触发器中的一行并得到错误:

要更新的元组已被当前命令触发的操作修改

我知道更新将被删除的行没有多大意义,但是......

就我而言,我有取消订单的功能。它执行一些操作,包括从订单中清除折扣代码(因此代码可以再次使用)。我想在BEFORE DELETE触发器中使用相同的功能(订单删除也是一种取消)。

现在我必须手动调用取消函数,然后删除订单。我想避免在没有先取消订单的情况下意外删除订单的风险,因此BEFORE DELETE触发器是一个明显的选择。

有解决方法吗?有什么建议么?

为什么我不能更新将要删除的行?

标签: postgresqltriggerspostgresql-10

解决方案


这是由实现引起的限制,使您无法这样做。它与 PostgreSQL 中的“元组可见性”概念有关。

我将添加一个默认为取消函数的附加boolean参数,用于确定是否应该更新该行。然后,您可以使用 调用触发器中的函数。modify_rowTRUEmodify_row => FALSE


推荐阅读