postgresql - 为什么我的 Postgres DELETE 删除零行,当存在一个行时?

标签 postgresql triggers foreign-keys

我有一个表 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/

相关文章:

如果外键失败,Mysql忽略插入

postgresql - "PostGIS Error: type “geography” 不存在”使用 psql 时

r - 在 postgresql 中使用 PL/R 进行 kmeans 聚类

python - psycopg2 类型施法者已创建并注册但未找到

Postgresql,检查插入时触发错误

javascript - Bootstrap 3.2.0 : Open dropdown menu with javascript

SQL 触发器 : Are they fired after a statement or a transaction?

postgresql - 简单 UPDATE 查询中的语法错误

python - Django 和外键

mysql - 无法添加外键MySQL