我有一个表 transaction_metadata
,其中一行包含主键:ac98435e-3eb3-11e9-8a32-4713408df551
,它显示在 SELECT 语句中。
在事务中,删除它(DELETE FROM transaction_metadata WHERE id = 'ac98435e-3eb3-11e9-8a32-4713408df551'
)表示它删除了 0 行。稍后在事务中,删除引用的 transaction_metadata
行由于违反外键约束而失败。
怎么会这样?当 SELECT
中存在时,为什么 DELETE
说它删除了 0 行,而外键约束说它存在?
最佳答案
原来的问题是我们有一个触发器,每次对 transaction_metadata
行执行操作时,我们都会在 transaction_metadata_history
表中插入一行记录改变。此表在 transaction_metadata
上有外键约束,这一定导致 DELETE 不起作用。
作为解决方法,我们关闭了控制台 session 的触发器 (SET session_replication_role = replica;
),运行 DELETE
,然后重新打开它们 (SET session_replication_role = DEFAULT;
).
关于postgresql - 为什么我的 Postgres DELETE 删除零行,当存在一个行时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54992404/