]> granicus.if.org Git - postgresql/commitdiff
Get a snapshot before COPY in table sync
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 2 Aug 2017 14:59:01 +0000 (10:59 -0400)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 2 Aug 2017 15:34:42 +0000 (11:34 -0400)
This fixes a crash if the local table has a function index and the
function makes non-immutable calls.

Reported-by: Scott Milliken <scott@deltaex.com>
Author: Masahiko Sawada <sawada.mshk@gmail.com>

src/backend/replication/logical/tablesync.c

index 32abf5b368a287a72db00f1272ce5d3d42521ae0..4cca0f1a85f70233cede5881436c7070b5149736 100644 (file)
@@ -917,7 +917,9 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos)
                                walrcv_create_slot(wrconn, slotname, true,
                                                                   CRS_USE_SNAPSHOT, origin_startpos);
 
+                               PushActiveSnapshot(GetTransactionSnapshot());
                                copy_table(rel);
+                               PopActiveSnapshot();
 
                                res = walrcv_exec(wrconn, "COMMIT", 0, NULL);
                                if (res->status != WALRCV_OK_COMMAND)