pg_lsn
是一种表示LSN(日志序列号)的数据类型。
pg_lsn
在 PostgreSQL 9.4 中添加。
用法
pg_lsn
支持的值介于 0/0
和 FFFFFFFF/FFFFFFFF
之间。
支持标准的比较运算符,如 =
和 >
。
从 PostgreSQL 14 开始,可以进行字节值的加减运算。
变更历史
- PostgreSQL 19
- 输出格式更改为
%X/%08X
,这意味着低32位部分始终用八个十六进制数字零填充(提交 2633dae2)
- 输出格式更改为
- PostgreSQL 14
- 添加了
+(pg_lsn,numeric)
和-(pg_lsn,numeric)
运算符(提交 9bae7e4c)
- 添加了
- PostgreSQL 13
- 添加了对
MIN()
和MAX()
聚合函数的支持(提交 313f87a1)
- 添加了对
- PostgreSQL 9.4
- 已添加(提交 7d03a83f)
示例
pg_lsn
的基本用法
postgres=# SELECT '0/0'::pg_lsn; pg_lsn -------- 0/0 (1 row)
确定两个 LSN 之间的字节距离
postgres=# SELECT '7/A25801C8'::pg_lsn - '7/A2000000'::pg_lsn; ?column? ---------- 5767624 (1 row)
添加和减去字节值(PostgreSQL 14 及更高版本)
postgres=# SELECT '7/A25801C8'::pg_lsn + 128; ?column? ------------ 7/A2580248 (1 row) postgres=# SELECT '7/A25801C8'::pg_lsn - 65536; ?column? ------------ 7/A25701C8 (1 row)
尝试转换无效的 LSN
postgres=# SELECT '-1/-1'::pg_lsn; ERROR: invalid input syntax for type pg_lsn: "-1/-1" LINE 1: SELECT '-1/-1'::pg_lsn;
无法相加 LSN
postgres=# SELECT '7/A25801C8'::pg_lsn + '7/A2000000'::pg_lsn; ERROR: operator does not exist: pg_lsn + pg_lsn LINE 1: SELECT '7/A25801C8'::pg_lsn + '7/A2000000'::pg_lsn;
从 PostgreSQL 14 开始,可以相加 LSN 和 numeric
类型的值
postgres=# SELECT '7/A25801C8'::pg_lsn + 999; ?column? ------------ 7/A25805AF (1 row)
参考资料
- PostgreSQL 文档: pg_lsn