gpt4 book ai didi

sql - 如果在 PostgreSQL 中插入失败,有没有办法避免调用 nextval()?

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

在 PostgreSQL 数据库中,我有一个表,其中包含一个主键和另一个需要唯一的字段。

  CREATE TABLE users (
id INTEGER PRIMARY KEY DEFAULT nextval('groups_id_seq'::regclass),
name VARCHAR(255) UNIQUE NOT NULL
);

INSERT users (name) VALUES ('foo');
INSERT users (name) VALUES ('foo');
INSERT users (name) VALUES ('bar');

第二次插入失败,但序列 groups_id_seq 已经递增,因此当添加“bar”时,它会在 id 编号中留下空白。

有没有办法告诉 PostgreSQL 只有在满足其他约束的情况下才获取下一个值,或者如果名称不重复,我应该先使用 SELECT 检查吗?这仍然不能保证没有间隙,但至少可以将间隙的数量减少到极少数情况下,当有另一个进程试图同时插入相同的名称时

最佳答案

我不这么认为:序列的一个基本特征是可能存在间隙(想想两个并发事务,其中一个执行 ROLLBACK)。你应该忽略差距。为什么它们在您的案例中是个问题?

关于sql - 如果在 PostgreSQL 中插入失败,有没有办法避免调用 nextval()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036571/

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