Postgres SERIAL 列自动提交间隙
Postgres SERIAL column Autocommit gap
如果我有 table:
CREATE TABLE table_name(
id SERIAL
);
我插入了以下 ID:..., 68, 69。
然后我有 2 个并且我必须并行竞争事务 (T1, T2) 运行。我知道交易首先完成可能会获得更高的数字,因为在交易提交之前分配并写入 WAL 中的 id。
T1 (Take Number = 70), T2 (Take number = 71), T2 (Commit), T1(Commit)
AUTOCOMMIT 时的情况(在事务外插入行时)。
而且我必须非常接近插入是否保证第一个插入的行的编号较小?
用例如下:
插入行后,我将执行 SELECT id FROM table_name ORDER BY id
。难道我一次又一次地执行这个命令两次,然后得到以下结果:
Select 1 个结果:68,69,71
Select 2 结果:68,69,70,71
即使不使用显式事务,也不能保证获得较低序列值的语句也会先提交。
如果我有 table:
CREATE TABLE table_name(
id SERIAL
);
我插入了以下 ID:..., 68, 69。
然后我有 2 个并且我必须并行竞争事务 (T1, T2) 运行。我知道交易首先完成可能会获得更高的数字,因为在交易提交之前分配并写入 WAL 中的 id。
T1 (Take Number = 70), T2 (Take number = 71), T2 (Commit), T1(Commit)
AUTOCOMMIT 时的情况(在事务外插入行时)。 而且我必须非常接近插入是否保证第一个插入的行的编号较小?
用例如下:
插入行后,我将执行 SELECT id FROM table_name ORDER BY id
。难道我一次又一次地执行这个命令两次,然后得到以下结果:
Select 1 个结果:68,69,71
Select 2 结果:68,69,70,71
即使不使用显式事务,也不能保证获得较低序列值的语句也会先提交。