-<!-- $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>
<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>
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.
</entry>
</row>
</tbody>
* 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 $
*
*-------------------------------------------------------------------------
*/
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));
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));