在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检查名称是否不重复?这仍然不能保证缺口的缺乏,但至少可以将它们减少到极少数情况,即当有其他进程尝试同时插入相同名称时。