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
的有效性。