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 bef40b30c9eddf6559818022ac204658f3c42728..f18c9a82a9ed8c57aaa6fe01fad61edf47ef9346 100644 (file)
@@ -320,6 +320,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. */