]> granicus.if.org Git - postgresql/commitdiff
Return NULL instead of 0/0 in pg_last_xlog_receive_location() and
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 10 Jun 2010 07:00:27 +0000 (07:00 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 10 Jun 2010 07:00:27 +0000 (07:00 +0000)
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
src/backend/access/transam/xlog.c

index fc7ec51a1a9a64ac835b01e96ff5be0d29d00094..f48313592151439dd2826f7809e0309de2911fbd 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.517 2010/06/05 14:56:36 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.518 2010/06/10 07:00:25 heikki Exp $ -->
 
  <chapter id="functions">
   <title>Functions and Operators</title>
@@ -13280,13 +13280,12 @@ postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
         <literal><function>pg_last_xlog_receive_location</function>()</literal>
         </entry>
        <entry><type>text</type></entry>
-       <entry>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).
+       <entry>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.
        </entry>
       </row>
       <row>
@@ -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 recovery
-        then the return value will be InvalidXLogRecPtr (0/0).
+        When the server has been started normally without recovery
+        the function returns NULL.
        </entry>
       </row>
      </tbody>
index 4718b538e899ce1be89c8a69ee846b21aa886ef5..ecd7df2107a81b494025e135293966c0c3092ef7 100644 (file)
@@ -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));