我有一个与索引创建相关的代码语句
create index if not exists foo_table_index_any_id on paublic.foo_table (any_id);
如果索引已经在表中创建,表是否会被独占锁定?
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)立即通过。
NOTICE: relation "foo_idx" already exists, skipping
CREATE INDEX CONCURRENTLY IF NOT EXISTS foo_idx on foo(id)
1条答案
按热度按时间mjqavswn1#
是的,它需要一个独占锁,至少在Postgres 15.3中是这样。
客户1:
客户二:
回滚客户机1中的事务将在客户机2中给出
NOTICE: relation "foo_idx" already exists, skipping
消息。CREATE INDEX CONCURRENTLY IF NOT EXISTS foo_idx on foo(id)
立即通过。