检测到 PostgreSQL 死锁

PostgreSQL deadlock detected

假设我 table A 有 2000 万个条目,另一个较小的 table B 有 <100 万个条目。

我正在尝试添加一个从 B 指向 A 的 FK。

Process 1240: ALTER TABLE "product" ADD CONSTRAINT 
"product_top_id_56635_fk_tableb_id" FOREIGN KEY ("top_id")
REFERENCES "tableb" ("id") DEFERRABLE INITIALLY DEFERRED

此更改是否会改变 tableb 上的任何内容?如果不是,为什么会导致死锁?

创建外键不会修改 A,但会锁定 A 中的行。这是为了保证在创建约束时无法修改或删除这些值。

因此可能会与锁定两个表中的行的其他事务发生死锁。

避免修改 A,使用显式锁定或等待维护 window。