pg_xact_commit_timestamp_origin() 是一个系统函数,用于返回事务的提交时间戳和复制源。
pg_xact_commit_timestamp_origin() 函数于 PostgreSQL 14 中添加。
用法
pg_xact_commit_timestamp_origin (xid)
→ record (timestamptimestamp with time zone,roidentoid)
如果事务记录未与复制源关联,则 roident 将返回 0。
变更历史
- PostgreSQL 14
- 添加(提交 b1e48bbe)
示例
这是 pg_xact_commit_timestamp_origin() 的基本用法示例,此处在一个订阅者节点上执行,显示最初在发布者节点上插入的节点。
postgres=# SELECT foo.xmin, origin.roident, foo.id, foo.node
FROM foo,
LATERAL pg_xact_commit_timestamp_origin(foo.xmin) origin;
xmin | roident | id | node
------+---------+----+----------------
740 | 1 | 1 | logical[node1]
740 | 1 | 2 | logical[node1]
740 | 1 | 3 | logical[node1]
740 | 1 | 4 | logical[node1]
740 | 1 | 5 | logical[node1]
(5 rows)
在订阅者节点上插入的额外行具有 roident 值为 0,因为它们并非源自其他节点。
postgres=# INSERT INTO foo
VALUES (pg_catalog.generate_series(6, 10),
pg_catalog.current_setting('cluster_name'),
pg_catalog.clock_timestamp()
);
INSERT 0 5
postgres=# SELECT foo.xmin, origin.roident, foo.id, foo.node
FROM foo,
LATERAL pg_xact_commit_timestamp_origin(foo.xmin) origin;
xmin | roident | id | node
------+---------+----+----------------
740 | 1 | 1 | logical[node1]
740 | 1 | 2 | logical[node1]
740 | 1 | 3 | logical[node1]
740 | 1 | 4 | logical[node1]
740 | 1 | 5 | logical[node1]
741 | 0 | 6 | logical[node2]
741 | 0 | 7 | logical[node2]
741 | 0 | 8 | logical[node2]
741 | 0 | 9 | logical[node2]
741 | 0 | 10 | logical[node2]
(10 rows)
参考资料
- PostgreSQL 文档: 已提交事务信息函数
