*** a/doc/src/sgml/func.sgml
--- b/doc/src/sgml/func.sgml
***************
*** 13286,13292 **** postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
then this value will remain static at the value of the last WAL record
received and synced to disk during that recovery. When the server has
been started without a streaming recovery then the return value will be
! InvalidXLogRecPtr (0/0).
--- 13286,13292 ----
then this value will remain static at the value of the last WAL record
received and synced to disk during that recovery. When the server has
been started without a streaming recovery then the return value will be
! NULL>.
***************
*** 13299,13305 **** postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
If recovery has completed then this value will remain static at
the value of the last WAL record applied during that recovery.
When the server has been started normally without a recovery
! then the return value will be InvalidXLogRecPtr (0/0).
--- 13299,13305 ----
If recovery has completed then this value will remain static at
the value of the last WAL record applied during that recovery.
When the server has been started normally without a recovery
! then the return value will be NULL>.
*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
***************
*** 8753,8765 **** Datum
pg_last_xlog_receive_location(PG_FUNCTION_ARGS)
{
XLogRecPtr recptr;
- char location[MAXFNAMELEN];
recptr = GetWalRcvWriteRecPtr();
! snprintf(location, sizeof(location), "%X/%X",
! recptr.xlogid, recptr.xrecoff);
! PG_RETURN_TEXT_P(cstring_to_text(location));
}
/*
--- 8753,8771 ----
pg_last_xlog_receive_location(PG_FUNCTION_ARGS)
{
XLogRecPtr recptr;
recptr = GetWalRcvWriteRecPtr();
! if (recptr.xlogid == 0 && recptr.xrecoff == 0)
! PG_RETURN_NULL();
! else
! {
! char location[MAXFNAMELEN];
!
! snprintf(location, sizeof(location), "%X/%X",
! recptr.xlogid, recptr.xrecoff);
! PG_RETURN_TEXT_P(cstring_to_text(location));
! }
}
/*
***************
*** 8774,8788 **** pg_last_xlog_replay_location(PG_FUNCTION_ARGS)
/* use volatile pointer to prevent code rearrangement */
volatile XLogCtlData *xlogctl = XLogCtl;
XLogRecPtr recptr;
- char location[MAXFNAMELEN];
SpinLockAcquire(&xlogctl->info_lck);
recptr = xlogctl->recoveryLastRecPtr;
SpinLockRelease(&xlogctl->info_lck);
! snprintf(location, sizeof(location), "%X/%X",
! recptr.xlogid, recptr.xrecoff);
! PG_RETURN_TEXT_P(cstring_to_text(location));
}
/*
--- 8780,8800 ----
/* use volatile pointer to prevent code rearrangement */
volatile XLogCtlData *xlogctl = XLogCtl;
XLogRecPtr recptr;
SpinLockAcquire(&xlogctl->info_lck);
recptr = xlogctl->recoveryLastRecPtr;
SpinLockRelease(&xlogctl->info_lck);
! if (recptr.xlogid == 0 && recptr.xrecoff == 0)
! PG_RETURN_NULL();
! else
! {
! char location[MAXFNAMELEN];
!
! snprintf(location, sizeof(location), "%X/%X",
! recptr.xlogid, recptr.xrecoff);
! PG_RETURN_TEXT_P(cstring_to_text(location));
! }
}
/*