相关疑难解决方法(0)

我可以选择插入到同一个未提交事务中的数据吗?

也许这是一个愚蠢的初学者问题,但我在任何地方都找不到答案。我到处都读到了Transaction Isolation解决并发事务中数据可见性的方法。我关心的是单个事务中的行为。

如果我开始一个事务,插入一些数据,我是否能够在之后立即选择它们 - 仍然在同一个但未提交的事务中?如果是,在并发事务的情况下,这种行为是否可以像提到的事务隔离一样以类似的方式改变?

具体来说,我的目标是 PostgreSQL 9.4。

postgresql transaction

31
推荐指数
2
解决办法
3万
查看次数

如何在交易 ID 环绕后比较 xmin 和 txid_current()?

除了常规列之外,Postgres 表还有各种可用的系统列。其中之一,xmin,存储用于创建行的事务 ID。它的数据类型是xid,一个四字节整数,在某个点环绕(即不一定是唯一的)。该函数txid_current()反过来返回当前事务 ID,但作为bigint,因为它“使用“纪元”计数器进行了扩展,因此它不会在安装的生命周期内回绕”(引用手册)。

如果尚未发生交易回绕,则两个值似乎都匹配:

# CREATE TABLE test (label text);
CREATE TABLE
# INSERT INTO test VALUES ('test') RETURNING txid_current();
 txid_current 
--------------
   674500
(1 row)
INSERT 0 1
# SELECT xmin FROM test;
  xmin  
--------
 674500
(1 row)
Run Code Online (Sandbox Code Playgroud)

但我想知道:这两个值总是具有可比性吗?据我了解,txid_current()将在交易 ID 环绕(最多 2^32 个交易)后继续提供唯一值,xmin并将从零开始。这意味着两者都在那时开始返回不同的值?

如果这是真的,有没有办法来提取规则xid一的txid_current()结果,以便它匹配xmin的表(例如铸造项目txid_current(),以整数)?

编辑:更清楚地说明我关心事务 ID 环绕之后会发生什么,这很可能发生在 2^32 事务之前很久。感谢 Daniel Vérité 在评论中指出这一点。

postgresql transaction postgresql-9.5

13
推荐指数
1
解决办法
6120
查看次数

如何查看 PostgreSQL 事务中更改的元组?

BEGIN;

   INSERT INTO foo_table(foo_column) VALUES('a'),('b'),('c');

   -- SELECT * FROM pg_stat_activity WHERE ...
   -- shows records with a flag if they have been added/deleted/updated

END;
Run Code Online (Sandbox Code Playgroud)

有没有办法查看 PostgreSQL 9.x 中给定表的事务未提交的插入/删除?这纯粹是为了视觉确认。

虽然我最初的想法是否定的(只对表执行 SQL-Select),但某些用户想要可视化事务中的差异。如果有很多保存点和事务,我可以看到这会有什么帮助。因此,值得向整个社区询问。

postgresql transaction

6
推荐指数
1
解决办法
3883
查看次数

标签 统计

postgresql ×3

transaction ×3

postgresql-9.5 ×1