From 7227bca84a9233fb2d7c130294511d48d8458e2f Mon Sep 17 00:00:00 2001 From: alterego655 <824662526@qq.com> Date: Tue, 25 Nov 2025 19:07:52 +0800 Subject: [PATCH v1 2/5] Add pg_last_wal_write_lsn() SQL function Returns the current WAL write position on a standby server using GetWalRcvWriteRecPtr(). This enables verification of WAIT FOR LSN MODE WRITE and operational monitoring of standby WAL write progress. --- doc/src/sgml/func/func-admin.sgml | 19 +++++++++++++++++++ src/backend/access/transam/xlogfuncs.c | 19 +++++++++++++++++++ src/include/catalog/pg_proc.dat | 4 ++++ 3 files changed, 42 insertions(+) diff --git a/doc/src/sgml/func/func-admin.sgml b/doc/src/sgml/func/func-admin.sgml index 1b465bc8ba7..ed4e77d12ba 100644 --- a/doc/src/sgml/func/func-admin.sgml +++ b/doc/src/sgml/func/func-admin.sgml @@ -688,6 +688,25 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset + + + + pg_last_wal_write_lsn + + pg_last_wal_write_lsn () + pg_lsn + + + Returns the last write-ahead log location that has been received and + written to disk by streaming replication, but not necessarily synced. + While streaming replication is in progress this will increase + monotonically. If recovery has completed then this will remain static + at the location of the last WAL record written during recovery. If + streaming replication is disabled, or if it has not yet started, the + function returns NULL. + + + diff --git a/src/backend/access/transam/xlogfuncs.c b/src/backend/access/transam/xlogfuncs.c index 3e45fce43ed..46cd4a7ce2f 100644 --- a/src/backend/access/transam/xlogfuncs.c +++ b/src/backend/access/transam/xlogfuncs.c @@ -347,6 +347,25 @@ pg_last_wal_receive_lsn(PG_FUNCTION_ARGS) PG_RETURN_LSN(recptr); } +/* + * Report the last WAL write location (same format as pg_backup_start etc) + * + * This is useful for determining how much of WAL has been received and + * written to disk by walreceiver, but not necessarily synced/flushed. + */ +Datum +pg_last_wal_write_lsn(PG_FUNCTION_ARGS) +{ + XLogRecPtr recptr; + + recptr = GetWalRcvWriteRecPtr(); + + if (!XLogRecPtrIsValid(recptr)) + PG_RETURN_NULL(); + + PG_RETURN_LSN(recptr); +} + /* * Report the last WAL replay location (same format as pg_backup_start etc) * diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 66431940700..fcb674c05b3 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6782,6 +6782,10 @@ proname => 'pg_last_wal_receive_lsn', provolatile => 'v', prorettype => 'pg_lsn', proargtypes => '', prosrc => 'pg_last_wal_receive_lsn' }, +{ oid => '6434', descr => 'current wal write location', + proname => 'pg_last_wal_write_lsn', provolatile => 'v', + prorettype => 'pg_lsn', proargtypes => '', + prosrc => 'pg_last_wal_write_lsn' }, { oid => '3821', descr => 'last wal replay location', proname => 'pg_last_wal_replay_lsn', provolatile => 'v', prorettype => 'pg_lsn', proargtypes => '', -- 2.51.0