• Noah Misch's avatar
    Fix CREATE INDEX CONCURRENTLY for the newest prepared transactions. · a5b9a000
    Noah Misch authored
    The purpose of commit 8a54e12a was to
    fix this, and it sufficed when the PREPARE TRANSACTION completed before
    the CIC looked for lock conflicts.  Otherwise, things still broke.  As
    before, in a cluster having used CIC while having enabled prepared
    transactions, queries that use the resulting index can silently fail to
    find rows.  It may be necessary to reindex to recover from past
    occurrences; REINDEX CONCURRENTLY suffices.  Fix this for future index
    builds by making CIC wait for arbitrarily-recent prepared transactions
    and for ordinary transactions that may yet PREPARE TRANSACTION.  As part
    of that, have PREPARE TRANSACTION transfer locks to its dummy PGPROC
    before it calls ProcArrayClearTransaction().  Back-patch to 9.6 (all
    supported versions).
    
    Andrey Borodin, reviewed (in earlier versions) by Andres Freund.
    
    Discussion: https://postgr.es/m/01824242-AA92-4FE9-9BA7-AEBAFFEA3D0C@yandex-team.ru
    a5b9a000
xact.c 174 KB