• Andres Freund's avatar
    Don't force-assign transaction id when exporting a snapshot. · 6c2003f8
    Andres Freund authored
    Previously we required every exported transaction to have an xid
    assigned. That was used to check that the exporting transaction is
    still running, which in turn is needed to guarantee that that
    necessary rows haven't been removed in between exporting and importing
    the snapshot.
    
    The exported xid caused unnecessary problems with logical decoding,
    because slot creation has to wait for all concurrent xid to finish,
    which in turn serializes concurrent slot creation.   It also
    prohibited snapshots to be exported on hot-standby replicas.
    
    Instead export the virtual transactionid, which avoids the unnecessary
    serialization and the inability to export snapshots on standbys. This
    changes the file name of the exported snapshot, but since we never
    documented what that one means, that seems ok.
    
    Author: Petr Jelinek, slightly editorialized by me
    Reviewed-By: Andres Freund
    Discussion: https://postgr.es/m/f598b4b8-8cd7-0d54-0939-adda763d8c34@2ndquadrant.com
    6c2003f8
predicate.c 158 KB