【问题标题】:adding foreign key constraint locks up table添加外键约束锁定表
【发布时间】:2010-12-28 06:33:36
【问题描述】:

我有一张不是很大的“aaa”表。它的行数少于 10'000。但是这个表的读操作非常频繁。

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

ALTER TABLE "bbb" ADD CONSTRAINT "topic_id_refs_id_3942a46c6ab2c0b4" FOREIGN KEY ("topic_id") REFERENCES "aaa" ("id") DEFERRABLE INITIALLY DEFERRED;

当前的解决方法是在非高峰时间创建任何新表,例如重启数据库后的午夜。

我想知道是否有任何适当的解决方案。这是一个影响所有关系数据库的问题吗?我的数据库是 PostgreSQL 8.3。

【问题讨论】:

    标签: sql mysql database postgresql migration


    【解决方案1】:

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

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

    【讨论】:

    • 只是一个问题:ALTER TABLE 用于表“bbb”。表“aaa”上还有锁吗? ALTER TABLE 语句是否锁定两个表?
    • 是的,如果您必须重新启动数据库,则您可能有挥之不去的连接持有某种不应该的锁。
    • 会注意重启部分。
    猜你喜欢
    • 2017-06-10
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2019-12-06
    相关资源
    最近更新 更多