gpt4 book ai didi

postgresql - postgresql SERIAL 是否保证单个插入语句中没有间隙?

转载 作者:行者123 更新时间:2023-11-29 12:08:25 24 4
gpt4 key购买 nike

让我们开始:

CREATE TABLE "houses" (
"id" serial NOT NULL PRIMARY KEY,
"name" character varying NOT NULL)

想象一下,我尝试在单个语句中同时(!)向表中插入多条记录(可能 10 条或 1000 条)。

INSERT INTO houses (name) VALUES
('B6717'),
('HG120');

是否保证当单个线程在单个语句中插入 X 条记录时(当同时其他线程同时尝试将其他记录插入同一个表时)这些记录的 ID 编号为 A 到 A+X -1?或者有没有可能 A+100 被线程 1 占用,A+99 被线程 2 占用?

最佳答案

使用两个 PgAdmin 连接一次插入 10000 条记录似乎足以证明串行类型不能保证我的 PostgreSQL 9.5 上批处理的连续性

DO
$do$
BEGIN
FOR i IN 1..200 LOOP
EXECUTE format('INSERT INTO houses (name) VALUES %s%s;', repeat('(''a' || i || '''),', 9999), '(''a' || i || ''')');
END LOOP;
END
$do$;

以上导致属于两个不同批处理的 id 之间非常频繁的重叠

SELECT * FROM houses WHERE id BETWEEN 34370435 AND 34370535 ORDER BY id;

34370435;"b29"
34370436;"b29"
34370437;"b29"
34370438;"a100"
34370439;"b29"
34370440;"b29"
34370441;"a100"
...

关于postgresql - postgresql SERIAL 是否保证单个插入语句中没有间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201826/

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