在 BEFORE DELETE 触发器中更新行

Update row in BEFORE DELETE trigger

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

tuple to be updated was already modified by an operation triggered by the current command

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

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

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

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

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

这是实施造成的限制,使您无法这样做。这与PostgreSQL中“元组可见性”的概念有关。

我会在取消函数中添加一个额外的 boolean 参数 modify_row,默认为 TRUE,以确定是否应更新该行。然后,您可以使用 modify_row => FALSE.

在触发器中调用该函数