postgresql - 更新 BEFORE DELETE 触发器中的行
问题描述
简而言之:我需要更新BEFORE DELETE
触发器中的一行并得到错误:
要更新的元组已被当前命令触发的操作修改
我知道更新将被删除的行没有多大意义,但是......
就我而言,我有取消订单的功能。它执行一些操作,包括从订单中清除折扣代码(因此代码可以再次使用)。我想在BEFORE DELETE
触发器中使用相同的功能(订单删除也是一种取消)。
现在我必须手动调用取消函数,然后删除订单。我想避免在没有先取消订单的情况下意外删除订单的风险,因此BEFORE DELETE
触发器是一个明显的选择。
有解决方法吗?有什么建议么?
为什么我不能更新将要删除的行?
解决方案
这是由实现引起的限制,使您无法这样做。它与 PostgreSQL 中的“元组可见性”概念有关。
我将添加一个默认为取消函数的附加boolean
参数,用于确定是否应该更新该行。然后,您可以使用 调用触发器中的函数。modify_row
TRUE
modify_row => FALSE
推荐阅读
- flutter - 是否可以在 Flutter 中使用 body 发出 GET 请求?
- java - 强制不可变接口实现功能接口
- ruby - 给定一个 CIDR 块列表,如何有效地找到一个 IP 地址在 Ruby 中属于哪个块?
- microsoft-edge - 如何向 Microsoft Edge 添加扩展
- apache-spark - 如何修复非法 Parquet 类型:INT64 (TIMESTAMP_MICROS) 错误
- selenium - 通过 jmeter 在 blazemeter 上远程运行 selenium 测试
- bash - 如何避免删除当前工作目录
- swift - 如何区分 kotlin multiplatform/native 中不同文件夹中的相同类名以快速实现?
- regex - 如何使正则表达式匹配字符串中的所有情况
- python - 如何根据文件夹中的所有类创建对象列表?