From 9402f8868d64f12cf6cd7b2fea5aeec146a5c54d Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy Date: Tue, 19 Jul 2022 08:52:19 +0000 Subject: [PATCH v1] Add new function pg_last_wal_replay_info() --- src/backend/access/transam/xlogfuncs.c | 36 ++++++++++++++++++++++++++ src/include/catalog/pg_proc.dat | 5 ++++ 2 files changed, 41 insertions(+) diff --git a/src/backend/access/transam/xlogfuncs.c b/src/backend/access/transam/xlogfuncs.c index 61e0f4a29c..db07dbb6a8 100644 --- a/src/backend/access/transam/xlogfuncs.c +++ b/src/backend/access/transam/xlogfuncs.c @@ -313,6 +313,42 @@ pg_last_wal_replay_lsn(PG_FUNCTION_ARGS) PG_RETURN_LSN(recptr); } +#define PG_LAST_WAL_REPLAY_INFO_COLS 2 +Datum +pg_last_wal_replay_info(PG_FUNCTION_ARGS) +{ + HeapTuple tuple; + TupleDesc tupleDesc; + Datum values[PG_LAST_WAL_REPLAY_INFO_COLS] = {0}; + bool nulls[PG_LAST_WAL_REPLAY_INFO_COLS] = {0}; + Datum result; + XLogRecPtr recptr; + TimeLineID tli; + + recptr = GetXLogReplayRecPtr(&tli); + + /* + * Build a tuple descriptor for our result type + */ + if (get_call_result_type(fcinfo, NULL, &tupleDesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + + if (recptr == 0) + PG_RETURN_NULL(); + + values[0] = Int32GetDatum(recptr); + values[1] = Int64GetDatum(tli); + + /* + * Build and return the tuple + */ + tuple = heap_form_tuple(tupleDesc, values, nulls); + result = HeapTupleGetDatum(tuple); + + PG_RETURN_DATUM(result); +} +#undef PG_LAST_WAL_REPLAY_INFO_COLS + /* * Compute an xlog file name and decimal byte offset given a WAL location, * such as is returned by pg_backup_stop() or pg_switch_wal(). diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 2e41f4d9e8..71ce3720ca 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6356,6 +6356,11 @@ proname => 'pg_last_xact_replay_timestamp', provolatile => 'v', prorettype => 'timestamptz', proargtypes => '', prosrc => 'pg_last_xact_replay_timestamp' }, +{ oid => '9319', descr => 'get last replayed wal info such as lsn, timeline id', + proname => 'pg_last_wal_replay_info', prorows => '1', + provolatile => 'v', prorettype => 'record', proargtypes => '', + proallargtypes => '{pg_lsn,int4}', proargmodes => '{o,o}', + proargnames => '{lsn, timeline_id}', prosrc => 'pg_last_wal_replay_info' }, { oid => '3071', descr => 'pause wal replay', proname => 'pg_wal_replay_pause', provolatile => 'v', prorettype => 'void', -- 2.25.1