首页 > 解决方案 > 为什么我的 Postgres DELETE 删除零行,当一个存在时?

问题描述

我有一个transaction_metadata带有主键行的表:ac98435e-3eb3-11e9-8a32-4713408df551,它显示在 SELECT 语句中。

在事务中,删除它 ( DELETE FROM transaction_metadata WHERE id = 'ac98435e-3eb3-11e9-8a32-4713408df551') 表示它删除了 0 行。稍后在事务中,删除transaction_metadata由于破坏外键约束而引用的行失败的行。

这怎么可能?当它存在于和外键约束时,为什么会DELETE说它删除了 0 行?SELECT

标签: postgresqltriggersforeign-keys

解决方案


事实证明,问题在于我们有一个触发器,每次对一行执行操作时,我们都会在记录更改的表中transaction_metadata插入一行。transaction_metadata_history该表在 上有一个外键约束transaction_metadata,这一定导致 DELETE 不起作用。

作为一种解决方法,我们关闭了控制台会话的触发器 ( SET session_replication_role = replica;),运行DELETEs,然后重新打开它们 ( SET session_replication_role = DEFAULT;)。


推荐阅读