diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index c5160fe907..d18921725c 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -4171,9 +4171,9 @@ ANY num_sync ( ). - The default is off. This parameter can only be set in the + slot on the remote instance. The slot will be created with the name + configured by setting, otherwise + with the generated name. The default is off. This parameter can only be set in the postgresql.conf file or on the server command line. diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 0aa0c52c49..af9b9d586c 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -362,9 +362,10 @@ WalReceiverMain(void) */ if (is_temp_slot) { - snprintf(slotname, sizeof(slotname), - "pg_walreceiver_%lld", - (long long int) walrcv_get_backend_pid(wrconn)); + if (slotname[0] == '\0') + snprintf(slotname, sizeof(slotname), + "pg_walreceiver_%lld", + (long long int) walrcv_get_backend_pid(wrconn)); walrcv_create_slot(wrconn, slotname, true, 0, NULL); diff --git a/src/backend/replication/walreceiverfuncs.c b/src/backend/replication/walreceiverfuncs.c index 21d1823607..28117883e1 100644 --- a/src/backend/replication/walreceiverfuncs.c +++ b/src/backend/replication/walreceiverfuncs.c @@ -218,7 +218,7 @@ ShutdownWalRcv(void) * "recptr" indicates the position where streaming should begin. "conninfo" * is a libpq connection string to use. "slotname" is, optionally, the name * of a replication slot to acquire. "create_temp_slot" indicates to create - * a temporary slot when no "slotname" is given. + * a temporary slot. * * WAL receivers do not directly load GUC parameters used for the connection * to the primary, and rely on the values passed down by the caller of this @@ -254,23 +254,17 @@ RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, const char *conninfo, else walrcv->conninfo[0] = '\0'; - /* - * Use configured replication slot if present, and ignore the value - * of create_temp_slot as the slot name should be persistent. Otherwise, - * use create_temp_slot to determine whether this WAL receiver should - * create a temporary slot by itself and use it, or not. - */ if (slotname != NULL && slotname[0] != '\0') { strlcpy((char *) walrcv->slotname, slotname, NAMEDATALEN); - walrcv->is_temp_slot = false; } else { walrcv->slotname[0] = '\0'; - walrcv->is_temp_slot = create_temp_slot; } + walrcv->is_temp_slot = create_temp_slot; + if (walrcv->walRcvState == WALRCV_STOPPED) { launch = true; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 53665971f5..51ef6987b5 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -2051,7 +2051,7 @@ static struct config_bool ConfigureNamesBool[] = { {"wal_receiver_create_temp_slot", PGC_SIGHUP, REPLICATION_STANDBY, - gettext_noop("Sets whether a WAL receiver should create a temporary replication slot if no permanent slot is configured."), + gettext_noop("Sets whether a WAL receiver should create a temporary replication slot."), }, &wal_receiver_create_temp_slot, false, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index f01e43b818..5308d602f4 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -319,8 +319,7 @@ #max_standby_streaming_delay = 30s # max delay before canceling queries # when reading streaming WAL; # -1 allows indefinite delay -#wal_receiver_create_temp_slot = off # Create temp slot if primary_slot_name - # is not set. +#wal_receiver_create_temp_slot = off # Create temp replication slot #wal_receiver_status_interval = 10s # send replies at least this often # 0 disables #hot_standby_feedback = off # send info from standby to prevent