summaryrefslogtreecommitdiff
path: root/src/backend/replication/walreceiver.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/replication/walreceiver.c')
-rw-r--r--src/backend/replication/walreceiver.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index d69fb90132d..d1ad75da87a 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -1348,7 +1348,8 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
WalRcvState state;
XLogRecPtr receive_start_lsn;
TimeLineID receive_start_tli;
- XLogRecPtr received_lsn;
+ XLogRecPtr written_lsn;
+ XLogRecPtr flushed_lsn;
TimeLineID received_tli;
TimestampTz last_send_time;
TimestampTz last_receipt_time;
@@ -1366,7 +1367,8 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
state = WalRcv->walRcvState;
receive_start_lsn = WalRcv->receiveStart;
receive_start_tli = WalRcv->receiveStartTLI;
- received_lsn = WalRcv->flushedUpto;
+ written_lsn = pg_atomic_read_u64(&WalRcv->writtenUpto);
+ flushed_lsn = WalRcv->flushedUpto;
received_tli = WalRcv->receivedTLI;
last_send_time = WalRcv->lastMsgSendTime;
last_receipt_time = WalRcv->lastMsgReceiptTime;
@@ -1413,43 +1415,47 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS)
else
values[2] = LSNGetDatum(receive_start_lsn);
values[3] = Int32GetDatum(receive_start_tli);
- if (XLogRecPtrIsInvalid(received_lsn))
+ if (XLogRecPtrIsInvalid(written_lsn))
nulls[4] = true;
else
- values[4] = LSNGetDatum(received_lsn);
- values[5] = Int32GetDatum(received_tli);
+ values[4] = LSNGetDatum(written_lsn);
+ if (XLogRecPtrIsInvalid(flushed_lsn))
+ nulls[5] = true;
+ else
+ values[5] = LSNGetDatum(flushed_lsn);
+ values[6] = Int32GetDatum(received_tli);
if (last_send_time == 0)
- nulls[6] = true;
+ nulls[7] = true;
else
- values[6] = TimestampTzGetDatum(last_send_time);
+ values[7] = TimestampTzGetDatum(last_send_time);
if (last_receipt_time == 0)
- nulls[7] = true;
+ nulls[8] = true;
else
- values[7] = TimestampTzGetDatum(last_receipt_time);
+ values[8] = TimestampTzGetDatum(last_receipt_time);
if (XLogRecPtrIsInvalid(latest_end_lsn))
- nulls[8] = true;
+ nulls[9] = true;
else
- values[8] = LSNGetDatum(latest_end_lsn);
+ values[9] = LSNGetDatum(latest_end_lsn);
if (latest_end_time == 0)
- nulls[9] = true;
+ nulls[10] = true;
else
- values[9] = TimestampTzGetDatum(latest_end_time);
+ values[10] = TimestampTzGetDatum(latest_end_time);
if (*slotname == '\0')
- nulls[10] = true;
+ nulls[11] = true;
else
- values[10] = CStringGetTextDatum(slotname);
+ values[11] = CStringGetTextDatum(slotname);
if (*sender_host == '\0')
- nulls[11] = true;
+ nulls[12] = true;
else
- values[11] = CStringGetTextDatum(sender_host);
+ values[12] = CStringGetTextDatum(sender_host);
if (sender_port == 0)
- nulls[12] = true;
+ nulls[13] = true;
else
- values[12] = Int32GetDatum(sender_port);
+ values[13] = Int32GetDatum(sender_port);
if (*conninfo == '\0')
- nulls[13] = true;
+ nulls[14] = true;
else
- values[13] = CStringGetTextDatum(conninfo);
+ values[14] = CStringGetTextDatum(conninfo);
}
/* Returns the record as Datum */