"Goel, Dhruv" <[email protected]> writes:
> Yes, you are correct. The test case here was that if a tuple is inserted
> after the reference snapshot is taken in Phase 2 and before the index is
> marked ready. If this tuple is deleted before the reference snapshot of Phase
> 3, it will never make it to the index. I have fixed this problem by making
> pg_index tuple updates transactional (I believe there is no reason why it has
> to be in place now) so that the xmin of the pg_index tuple is same the xmin
> of the snapshot in Phase 3.
I think you are mistaken that doing transactional updates in pg_index
is OK. If memory serves, we rely on xmin of the pg_index row for purposes
such as detecting whether a concurrently-created index is safe to use yet.
So a transactional update would restart that clock and result in temporary
denial of service.
regards, tom lane