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。
无效的XLogRecPtr
在9.3或更高版本中表示为零(常量InvalidXLogRecPtr);在9.2及更早版本中,xrecoff值为零。在这两种情况下,宏XLogRecPtrIsInvalid()可用于检查XLogRecPtr
的有效性。