Sql 添加外键约束锁定表

Sql 添加外键约束锁定表,sql,mysql,database,postgresql,migration,Sql,Mysql,Database,Postgresql,Migration,我有一张“aaa”桌子,它不是很大。它只有不到10000行。但是,此表上的读取操作非常频繁 每当我尝试创建外键指向“aaa”的新表“bbb”时。操作锁定,无法读取“aaa”。查询似乎也永远不会结束 ALTER TABLE "bbb" ADD CONSTRAINT "topic_id_refs_id_3942a46c6ab2c0b4" FOREIGN KEY ("topic_id") REFERENCES "aaa" ("id") DEFERRABLE INITIALLY DEFERRED; 当

我有一张“aaa”桌子,它不是很大。它只有不到10000行。但是,此表上的读取操作非常频繁

每当我尝试创建外键指向“aaa”的新表“bbb”时。操作锁定,无法读取“aaa”。查询似乎也永远不会结束

ALTER TABLE "bbb" ADD CONSTRAINT "topic_id_refs_id_3942a46c6ab2c0b4" FOREIGN KEY ("topic_id") REFERENCES "aaa" ("id") DEFERRABLE INITIALLY DEFERRED;
当前的解决方法是在非高峰时间创建任何新表,例如重新启动db后的午夜


我想知道是否有合适的解决办法。这是一个影响所有关系数据库的问题吗?My db是PostgreSQL 8.3。

ALTER TABLE
需要一个表锁,因此不能使用该表进行读取。您的问题听起来像是锁的问题,请检查pg_stat_活动以了解发生了什么


Offtopic:为什么在午夜后重新启动数据库?我们从不重新启动数据库,不需要它。

只是一个问题:ALTER TABLE用于表“bbb”。“aaa”桌上还有锁吗?ALTER TABLE语句会锁定这两个表吗?是的,如果必须重新启动db,可能会有延迟连接,这些连接持有某种不应该有的锁。请注意重新启动部分。