如果PostgreSQL中不存在带锁的索引,则创建索引

csga3l58  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(159)

我有一个与索引创建相关的代码语句

create index if not exists foo_table_index_any_id on paublic.foo_table (any_id);

如果索引已经在表中创建,表是否会被独占锁定?

mjqavswn

mjqavswn1#

是的,它需要一个独占锁,至少在Postgres 15.3中是这样。
客户1:

CREATE TABLE foo (id int);
CREATE INDEX foo_idx ON foo(id);
BEGIN;
INSERT INTO foo VALUES (1);

客户二:

CREATE INDEX IF NOT EXISTS foo_idx ON foo(id);
-- hangs awaiting ExclusiveLock

回滚客户机1中的事务将在客户机2中给出NOTICE: relation "foo_idx" already exists, skipping消息。
CREATE INDEX CONCURRENTLY IF NOT EXISTS foo_idx on foo(id)立即通过。

相关问题