【问题标题】:How do I find out the numeric ID of the current Postgres Transaction?如何找出当前 Postgres 事务的数字 ID?
【发布时间】:2013-12-15 15:40:52
【问题描述】:

在 psql 上我可以输入以下内容:

BEGIN;

我输入什么来获取新创建的交易的当前 id?

我正在尝试制作一个演示来解释 vaccum 和 MVVC 如何在 postgres 中工作。例如select xmin, xmax, * from test; 从当前事务的角度显示每行的 xmin 和 xmax。

我了解它的基本理论,但想组合一个交互式练习,以便我可以打开两个 psql 控制台,然后有一组逐步说明来显示 mvcc 和 vaccum 工作。

如何获取当前的 postgres 事务 id?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您可以从以下位置获取交易ID:

    txid_current()
    

    您还可以从它看到的快照中获取正在进行的事务:

    txid_snapshot_xip(txid_current_snapshot())
    

    手册中详细介绍了更多功能:

    http://www.postgresql.org/docs/current/static/functions-info.html#FUNCTIONS-TXID-SNAPSHOT

    【讨论】:

    • 注意调用txid_current() 将分配一个事务ID,如果会话还没有一个。只读会话只有一个虚拟事务 ID。
    • 使用 pg_current_xact_id_if_assigned() 来自 Docs:“如果事务可能是只读的,最好使用此变体,以避免不必要地消耗 XID。”
    【解决方案2】:

    Postgres 在version 10 中添加了txid_current_if_assigned()

    【讨论】:

    • pg_current_xact_id_if_assigned() 版本 13+(txid_current_if_assigned 仍然存在但已弃用)
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2011-04-12
    • 2015-07-05
    • 2014-12-24
    • 2017-12-11
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多