Eliminate replication protocol error related to IDENTIFY_SYSTEM.

The requirement that IDENTIFY_SYSTEM be run before START_REPLICATION
was both undocumented and unnecessary. Remove the error and ensure
that ThisTimeLineID is initialized in START_REPLICATION.

Elect not to backport because this requirement was expected behavior
(even if inconsistently enforced), and is not likely to cause any
major problem.

Author: Jeff Davis
Reviewed-by: Andres Freund
Discussion: https://postgr.es/m/de4bbf05b7cd94227841c433ea6ff71d2130c713.camel%40j-davis.com
This commit is contained in:
Jeff Davis 2021-07-09 08:48:19 -07:00
parent 31e8cfac58
commit 8e7811e952
1 changed files with 1 additions and 5 deletions

View File

@ -573,11 +573,6 @@ StartReplication(StartReplicationCmd *cmd)
StringInfoData buf;
XLogRecPtr FlushPtr;
if (ThisTimeLineID == 0)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("IDENTIFY_SYSTEM has not been run before START_REPLICATION")));
/* create xlogreader for physical replication */
xlogreader =
XLogReaderAllocate(wal_segment_size, NULL,
@ -619,6 +614,7 @@ StartReplication(StartReplicationCmd *cmd)
* that. Otherwise use the timeline of the last replayed record, which is
* kept in ThisTimeLineID.
*/
am_cascading_walsender = RecoveryInProgress();
if (am_cascading_walsender)
{
/* this also updates ThisTimeLineID */