Postgres - 创建带有外键约束的表太慢

Shi*_*n A 10 postgresql foreign-key

我有一个名为“Account”的表,它是一个经常使用的表,有 17 列,有超过 300,000 行。我正在尝试创建一个新表“NewTable”,它对“Account”表具有外键约束。

我的 CREATE TABLE 语句如下所示:

CREATE TABLE "NewTable"
   (
       "column1" VARCHAR(100) NOT NULL,
       "column2" INTEGER NOT NULL,
       PRIMARY KEY("column1")
       CONSTRAINT "SomeFK" FOREIGN KEY ("column2") REFERENCES "Account" ("ID")
    )
Run Code Online (Sandbox Code Playgroud)

上述语句执行了超过 25 分钟并没有完成。我们终止了交易。

当我们移除外键约束时,它会立即执行。

有人可以让我们知道是什么问题吗?我们最初认为它出于某种原因锁定了“Account”表,但是当我们查看“pg_locks”时,我们没有找到“Account”的任何条目——只有“NewTable”的独占锁。

小智 13

您的查询被锁定等待某事 - 我敢打赌它正在等待其他一些交易完成。

在创建表时,只需发出(在另一个 psql 会话中):

select * from pg_locks where pid = XXX and not granted;
Run Code Online (Sandbox Code Playgroud)

其中 xxx 是执行创建表的后端的 pid。

这将显示创建表正在等待的锁是什么。