postgresql - 为什么我的 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
解决方案
事实证明,问题在于我们有一个触发器,每次对一行执行操作时,我们都会在记录更改的表中transaction_metadata
插入一行。transaction_metadata_history
该表在 上有一个外键约束transaction_metadata
,这一定导致 DELETE 不起作用。
作为一种解决方法,我们关闭了控制台会话的触发器 ( SET session_replication_role = replica;
),运行DELETE
s,然后重新打开它们 ( SET session_replication_role = DEFAULT;
)。
推荐阅读
- laravel - 检查用户今天是否已通过身份验证
- spring-cloud - 具有 Azure 事件中心限制的 Spring Cloud Data Flow?
- database - Clickhouse - 是否可以在 1 个命令中更改集群中的表
- python - 我如何获得打印声明来告诉我作者的死亡日期?
- hyperledger-fabric - 带有 CA 服务器的 Hyperledger Fabric NodeOU 验证引导程序块失败。MSP 管理器失败
- javascript - JavaScript 函数无法按预期工作
- swift - 迅速。然后 TableView 加载数据
- python - python响应库将部分URL添加到请求参数
- postgresql - Postgres中大表分区的标准和策略
- mysql - 如何从 Node.js 中的数据库中获取哈希密码,以便 bcrypt 可以比较它