summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/config.sgml11
-rw-r--r--src/backend/replication/slot.c30
2 files changed, 36 insertions, 5 deletions
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index fc35a46e5ea..9398afbcbd3 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -7510,11 +7510,12 @@ log_line_prefix = '%m [%p] %q%u@%d/%a '
</term>
<listitem>
<para>
- Causes each replication command to be logged in the server log.
- See <xref linkend="protocol-replication"/> for more information about
- replication command. The default value is <literal>off</literal>.
- Only superusers and users with the appropriate <literal>SET</literal>
- privilege can change this setting.
+ Causes each replication command and <literal>walsender</literal>
+ process's replication slot acquisition/release to be logged in the
+ server log. See <xref linkend="protocol-replication"/> for more
+ information about replication command. The default value is
+ <literal>off</literal>. Only superusers and users with the appropriate
+ <literal>SET</literal> privilege can change this setting.
</para>
</listitem>
</varlistentry>
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 781aa43cc4f..18bc28195b0 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -537,6 +537,16 @@ retry:
*/
if (SlotIsLogical(s))
pgstat_acquire_replslot(s);
+
+ if (am_walsender)
+ {
+ ereport(log_replication_commands ? LOG : DEBUG1,
+ SlotIsLogical(s)
+ ? errmsg("acquired logical replication slot \"%s\"",
+ NameStr(s->data.name))
+ : errmsg("acquired physical replication slot \"%s\"",
+ NameStr(s->data.name)));
+ }
}
/*
@@ -549,9 +559,17 @@ void
ReplicationSlotRelease(void)
{
ReplicationSlot *slot = MyReplicationSlot;
+ char *slotname = NULL; /* keep compiler quiet */
+ bool is_logical = false; /* keep compiler quiet */
Assert(slot != NULL && slot->active_pid != 0);
+ if (am_walsender)
+ {
+ slotname = pstrdup(NameStr(slot->data.name));
+ is_logical = SlotIsLogical(slot);
+ }
+
if (slot->data.persistency == RS_EPHEMERAL)
{
/*
@@ -596,6 +614,18 @@ ReplicationSlotRelease(void)
MyProc->statusFlags &= ~PROC_IN_LOGICAL_DECODING;
ProcGlobal->statusFlags[MyProc->pgxactoff] = MyProc->statusFlags;
LWLockRelease(ProcArrayLock);
+
+ if (am_walsender)
+ {
+ ereport(log_replication_commands ? LOG : DEBUG1,
+ is_logical
+ ? errmsg("released logical replication slot \"%s\"",
+ slotname)
+ : errmsg("released physical replication slot \"%s\"",
+ slotname));
+
+ pfree(slotname);
+ }
}
/*