From 346d7cd7fa5723d45b52b1e61c0cb0ba41a8ce99 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 10 Jun 2010 07:00:27 +0000 Subject: [PATCH] Return NULL instead of 0/0 in pg_last_xlog_receive_location() and pg_last_xlog_replay_location(). Per Robert Haas's suggestion, after Itagaki Takahiro pointed out an issue in the docs. Also, some wording changes in the docs by me. --- doc/src/sgml/func.sgml | 19 +++++++++---------- src/backend/access/transam/xlog.c | 8 +++++++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index fc7ec51a1a..f483135921 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,4 +1,4 @@ - + Functions and Operators @@ -13280,13 +13280,12 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup()); pg_last_xlog_receive_location() text - Get last transaction log location received and synced to disk during - streaming recovery. If streaming recovery is still in progress - this will increase monotonically. If streaming recovery has completed - 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). + Get last transaction log location received and synced to disk by + streaming replication. While streaming replication is in progress + this will increase monotonically. If recovevery has completed + this will remain static at the value of the last WAL record + received and synced to disk during recovery. If streaming replication + is disabled, or it has not yet started, the function returns NULL. @@ -13298,8 +13297,8 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup()); If recovery is still in progress this will increase monotonically. 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). + When the server has been started normally without recovery + the function returns NULL. diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 4718b538e8..ecd7df2107 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.419 2010/06/09 15:04:06 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.420 2010/06/10 07:00:27 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -8757,6 +8757,9 @@ pg_last_xlog_receive_location(PG_FUNCTION_ARGS) recptr = GetWalRcvWriteRecPtr(); + if (recptr.xlogid == 0 && recptr.xrecoff == 0) + PG_RETURN_NULL(); + snprintf(location, sizeof(location), "%X/%X", recptr.xlogid, recptr.xrecoff); PG_RETURN_TEXT_P(cstring_to_text(location)); @@ -8780,6 +8783,9 @@ pg_last_xlog_replay_location(PG_FUNCTION_ARGS) recptr = xlogctl->recoveryLastRecPtr; SpinLockRelease(&xlogctl->info_lck); + if (recptr.xlogid == 0 && recptr.xrecoff == 0) + PG_RETURN_NULL(); + snprintf(location, sizeof(location), "%X/%X", recptr.xlogid, recptr.xrecoff); PG_RETURN_TEXT_P(cstring_to_text(location));