• Noah Misch's avatar
    In successful pg_recvlogical, end PGRES_COPY_OUT cleanly. · 8222a9d9
    Noah Misch authored
    pg_recvlogical merely called PQfinish(), so the backend sent messages
    after the disconnect.  When that caused EPIPE in internal_flush(),
    before a LogicalConfirmReceivedLocation(), the next pg_recvlogical would
    repeat already-acknowledged records.  Whether or not the defect causes
    EPIPE, post-disconnect messages could contain an ErrorResponse that the
    user should see.  One properly ends PGRES_COPY_OUT by repeating
    PQgetCopyData() until it returns a negative value.  Augment one of the
    tests to cover the case of WAL past --endpos.  Back-patch to v10, where
    commit 7c030783 first appeared.  Before
    that commit, pg_recvlogical never reached PGRES_COPY_OUT.
    
    Reported by Thomas Munro.
    
    Discussion: https://postgr.es/m/CAEepm=1MzM2Z_xNe4foGwZ1a+MO_2S9oYDq3M5D11=JDU_+0Nw@mail.gmail.com
    8222a9d9
006_logical_decoding.pl 6.17 KB