Skip to content

Commit 0d36d9f

Browse files
committed
Report WAL flush, not insert, position in replication IDENTIFY_SYSTEM
When beginning streaming replication, the client usually issues the IDENTIFY_SYSTEM command, which used to return the current WAL insert position. That's not suitable for the intended purpose of that field, however. pg_receivexlog uses it to start replication from the reported point, but if it hasn't been flushed to disk yet, it will fail. Change IDENTIFY_SYSTEM to report the flush position instead. Backpatch to 9.1 and above. 9.0 doesn't report any WAL position.
1 parent 490a918 commit 0d36d9f

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

doc/src/sgml/protocol.sgml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1353,7 +1353,7 @@ The commands accepted in walsender mode are:
13531353
</term>
13541354
<listitem>
13551355
<para>
1356-
Current xlog write location. Useful to get a known location in the
1356+
Current xlog flush location. Useful to get a known location in the
13571357
transaction log where streaming can start.
13581358
</para>
13591359
</listitem>

src/backend/replication/walsender.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ IdentifySystem(void)
289289
GetSystemIdentifier());
290290
snprintf(tli, sizeof(tli), "%u", ThisTimeLineID);
291291

292-
logptr = GetInsertRecPtr();
292+
logptr = GetFlushRecPtr();
293293

294294
snprintf(xpos, sizeof(xpos), "%X/%X",
295295
logptr.xlogid, logptr.xrecoff);

0 commit comments

Comments
 (0)