XLogRecPtr 是一个表示当前WAL文件中某个位置指针的数据类型。
截至PostgreSQL 9.3,XLogRecPtr 是一个64位无符号整数,定义在include/access/xlogdefs.h
/* * Pointer to a location in the XLOG. These pointers are 64 bits wide, * because we don't want them ever to overflow. */ typedef uint64 XLogRecPtr;
在PostgreSQL 9.2及更早版本中,XLogRecPtr 是一个结构体,包含两个32位整数。
typedef struct XLogRecPtr
{
uint32 xlogid; /* log file #, 0 based */
uint32 xrecoff; /* byte offset of location in log file */
} XLogRecPtr;
在外部,XLogRecPtr显示为一个LSN,由两组最多8个十六进制数字组成,用斜杠分隔,例如:
postgres=# SELECT pg_last_wal_receive_lsn(); pg_last_wal_receive_lsn ------------------------- 0/40043D8 (1 row)
从PostgreSQL 9.4开始,引入了一个离散的数据类型pg_lsn来表示LSN。
在9.3或更高版本中,一个无效的XLogRecPtr用零(常量InvalidXLogRecPtr)表示;在9.2及更早版本中,将xrecoff值设置为零。在两种情况下,都可以使用宏XLogRecPtrIsInvalid()来检查XLogRecPtr的有效性。
