是否有可能在 postgreSQL 逻辑复制插件中获取当前的 64 位 transactionId(带有纪元)
Is it possible to get the current 64 bit transactionId (with the epoch) in a postgreSQL logical replication plugin
我正在构建一个通过逻辑解码输出插件使用 Postgres WAL 的变更捕获系统。
在回调中很容易访问当前的 transactionId (https://doxygen.postgresql.org/structReorderBufferTXN.html#ad3ff4a8f320f2ec21e3e07688d29c741),但这是 32 位的,可以在 4B 提交后回绕,因此它作为逻辑计数器不可靠。
Postgres 内部维护一个 64 位的 transactionID,它不会环绕 (select txid_current()) :
https://www.postgresql.org/docs/9.4/functions-info.html#FUNCTIONS-TXID-SNAPSHOT
是否可以从逻辑解码插件访问此 ID?如果不是,原因是什么?
谢谢
你有两个选择:
您使用OidFunctionCall0
调用SQL函数txid_current()
。
您从 txid_current
、load_xid_epoch
和 convert_xid
从 src/backend/utils/adt/txid.c
复制代码。
第二个选项会更快,但你必须复制代码。
我正在构建一个通过逻辑解码输出插件使用 Postgres WAL 的变更捕获系统。
在回调中很容易访问当前的 transactionId (https://doxygen.postgresql.org/structReorderBufferTXN.html#ad3ff4a8f320f2ec21e3e07688d29c741),但这是 32 位的,可以在 4B 提交后回绕,因此它作为逻辑计数器不可靠。
Postgres 内部维护一个 64 位的 transactionID,它不会环绕 (select txid_current()) : https://www.postgresql.org/docs/9.4/functions-info.html#FUNCTIONS-TXID-SNAPSHOT
是否可以从逻辑解码插件访问此 ID?如果不是,原因是什么?
谢谢
你有两个选择:
您使用
OidFunctionCall0
调用SQL函数txid_current()
。您从
txid_current
、load_xid_epoch
和convert_xid
从src/backend/utils/adt/txid.c
复制代码。
第二个选项会更快,但你必须复制代码。