相关疑难解决方法(0)

有序序列生成

有没有办法为表记录生成某种有序标识符?

假设我们有两个线程在进行查询:

线程1:

begin;
insert into table1(id, value) values (nextval('table1_seq'), 'hello');
commit;
Run Code Online (Sandbox Code Playgroud)

线程2:

begin;
insert into table1(id, value) values (nextval('table1_seq'), 'world');
commit;
Run Code Online (Sandbox Code Playgroud)

完全可能(取决于时间)外部观察者会看到(2,'世界')记录出现在(1,'你好')之前.

这很好,但是我想要一种方法来获取自上次外部观察者检查它以来出现的'table1'中的所有记录.

那么,有没有办法按照插入的顺序获取记录?也许OID可以提供帮助?

postgresql sequence

10
推荐指数
2
解决办法
3798
查看次数

提交事务时以原子方式设置SERIAL值

假设我有一个表,我想使用serial主键来请求客户端的更改.客户将询问"在密钥X后给我更改".不使用SERIALIZABLE隔离级别或锁定,这很容易出现竞争条件.

事务A可以先启动,然后执行写操作,然后花费很长时间来提交.同时事务B将在A提交之前启动并提交.来自B的写入将获得比来自A的写入更高的主键.如果客户端现在要求更改,则它将错过来自A的仍然未提交的写入,并记下最新的最高主键.因此,即使在A提交之后,客户端也永远不会看到该更改,因为它的密钥低于客户端已经获得的更改.

是否有可能serial在提交时以原子方式确定a (或来自计数器的类似值),以便保证在提交时它将高于所有其他值,并且低于在其之后提交的所有值?如果不是解决这个问题的最佳方法是什么?

sql postgresql transactions commit

10
推荐指数
1
解决办法
1562
查看次数

标签 统计

postgresql ×2

commit ×1

sequence ×1

sql ×1

transactions ×1