Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Add missing break out seqscan loop in logical replication
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 3 Feb 2020 21:59:12 +0000 (18:59 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 3 Feb 2020 21:59:12 +0000 (18:59 -0300)
When replica identity is FULL (an admittedly unusual case), the loop
that searches for tuples in execReplication.c didn't stop scanning the
table when once a matching tuple was found.  Add the missing 'break'.

Note slight behavior change: we now return the first matching tuple
rather than the last one.  They are supposed to be indistinguishable
anyway, so this shouldn't matter.

Author: Konstantin Knizhnik
Discussion: https://postgr.es/m/379743f6-ae91-b866-f7a2-5624e6d2b0a4@postgrespro.ru

src/backend/executor/execReplication.c

index 95e027c970bf43fa1ad32bb71186ecbbbd0d138d..f6cfd1787a9304bd9ddbbba24b9cce65b066135f 100644 (file)
@@ -327,6 +327,9 @@ retry:
            XactLockTableWait(xwait, NULL, NULL, XLTW_None);
            goto retry;
        }
+
+       /* Found our tuple and it's not locked */
+       break;
    }
 
    /* Found tuple, try to lock it in the lockmode. */