diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 272c02f..8634b39 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -681,7 +681,8 @@ CREATE VIEW pg_stat_wal_receiver AS s.last_msg_receipt_time, s.latest_end_lsn, s.latest_end_time, - s.slot_name + s.slot_name, + s.conn_info FROM pg_stat_get_wal_receiver() s WHERE s.pid IS NOT NULL; diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index ce311cb..ea3a01d 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -1308,7 +1308,7 @@ WalRcvGetStateString(WalRcvState state) Datum pg_stat_get_wal_receiver(PG_FUNCTION_ARGS) { -#define PG_STAT_GET_WAL_RECEIVER_COLS 11 +#define PG_STAT_GET_WAL_RECEIVER_COLS 12 TupleDesc tupdesc; Datum values[PG_STAT_GET_WAL_RECEIVER_COLS]; bool nulls[PG_STAT_GET_WAL_RECEIVER_COLS]; @@ -1323,6 +1323,7 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS) XLogRecPtr latest_end_lsn; TimestampTz latest_end_time; char *slotname; + char *conninfo; /* No WAL receiver, just return a tuple with NULL values */ if (walrcv->pid == 0) @@ -1356,6 +1357,8 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS) TIMESTAMPTZOID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 11, "slot_name", TEXTOID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 12, "conn_info", + TEXTOID, -1, 0); BlessTupleDesc(tupdesc); @@ -1371,6 +1374,7 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS) latest_end_lsn = walrcv->latestWalEnd; latest_end_time = walrcv->latestWalEndTime; slotname = pstrdup(walrcv->slotname); + conninfo = pstrdup(walrcv->conninfo); SpinLockRelease(&walrcv->mutex); /* Fetch values */ @@ -1418,6 +1422,10 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS) nulls[10] = true; else values[10] = CStringGetTextDatum(slotname); + if (*conninfo == '\0') + nulls[11] = true; + else + values[11] = CStringGetTextDatum(conninfo); } /* Returns the record as Datum */