gpt4 book ai didi

sql - PostgreSQL:查看当前事务是否创建了一行

转载 作者:行者123 更新时间:2023-11-29 14:35:46 27 4
gpt4 key购买 nike

是否有可能查明表中的一行是否已由当前事务创建(因此对于其他事务尚不可见,因为当前事务仍处于事件状态)?

我的用例:我正在向数据库添加事件日志记录。这是在 plpgsql 触发器中完成的。事件表中的一行如下所示:(event id:serial, event action:text, count:integer:default 1)

现在,我的问题背后的原因是:如果某个行已由该事务创建(很可能在另一个触发器中),我可以增加计数而不是在事件表中创建新行。

最佳答案

您可以像这样查找日志条目:

SELECT ...
FROM tablename
WHERE xmin = current_txid() % (2^32)::bigint;

这将找到在当前事务中添加或修改的所有行。

缺点是这将强制对整个表进行顺序扫描,并且您无法避免这种情况,因为您不能在系统列上创建索引。

因此,您可以在表格中添加一个额外的列 xid,每当插入或更新行时,该列都会用 txid_current()::bigint 填充。这样的列可以被索引并有效地用于搜索:

SELECT ...
FROM tablename
WHERE xid = current_txid();

关于sql - PostgreSQL:查看当前事务是否创建了一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44964578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com