Postgres lock_timeout 何时同时创建唯一索引



在表上创建唯一索引时遇到问题。语句失败,并显示以下消息

>CREATE UNIQUE INDEX CONCURRENTLY my_table_pkey_new ON my_table (new_id);
ERROR:  canceling statement due to lock timeout

目前尚不清楚为什么我得到锁定超时。并发索引创建不应锁定表。

我也试图增加锁定超时,但没有成功

test=> show lock_timeout;
lock_timeout
--------------
5min
(1 row)
test=> set lock_timeout to 99999999;
SET
test=> show lock_timeout;
lock_timeout
--------------
5min
(1 row)

并发索引创建不应锁定表。

当然,它会锁定桌子。 如果有人在索引表时尝试删除表,会发生什么情况? 它只是将其锁定在与插入,更新或删除不冲突的模式下。 但它确实与其他操作冲突,包括真空和(具有讽刺意味的是,也许(其他同时创建索引。 它还需要一个更强的锁,它与一切冲突,但它只是暂时保持那个锁。 但是,如果该锁不能立即可用,则在等待时可能会超时。

test=> show lock_timeout;
lock_timeout
--------------
5min
(1 row)
test=> set lock_timeout to 99999999;
SET
test=> show lock_timeout;
lock_timeout
--------------
5min
(1 row)

所有这些操作是否像连续代码缩进所暗示的那样在一个会话中运行,没有干预语句? 如果是这样,那么我认为你一定在运行PostgreSQL的修改版本,因为我认为任何版本的PostgreSQL社区都不会这样做。

最新更新