CREATE INDEX CONCURRENTLY does not index prepared xact's data - Mailing list pgsql-bugs

From Andrey Borodin
Subject CREATE INDEX CONCURRENTLY does not index prepared xact's data
Date
Msg-id 2E712143-97F7-4890-B470-4A35142ABC82@yandex-team.ru
Whole thread Raw
Responses Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
List pgsql-bugs
Hi hackers!

$subj.

Steps to reproduce:
create extension if not exists amcheck;
create table if not exists t1(i int);
begin;
insert into t1 values(1);
prepare transaction 'x';
create index concurrently i1 on t1(i);
commit prepared 'x';
select bt_index_check('i1', true);

I observe:
NOTICE:  heap tuple (1,8) from table "t1" lacks matching index tuple within index "i1"
I expect: awaiting 'x' commit before index is created, correct index after.

This happens because WaitForLockersMultiple() does not take prepared xacts into account. Meanwhile CREATE INDEX
CONCURRENTLYexpects that locks are dropped only when transaction commit is visible. 

This issue affects pg_repack and similar machinery based on CIC.

PFA draft of a fix.

Best regards, Andrey Borodin.


Attachment

pgsql-bugs by date:

Previous
From: "Colin 't Hart"
Date:
Subject: Re: BUG #16779: psql -e not showing queries
Next
From: Victor Yegorov
Date:
Subject: Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data