Postgresql 重置postgres序列以获取未使用的主键ID
我使用的是postgres 9.5。作为应用程序初始化的一部分,我在应用程序启动时使用随机ID在数据库中进行一些插入。类似于Postgresql 重置postgres序列以获取未使用的主键ID,postgresql,database-sequence,Postgresql,Database Sequence,我使用的是postgres 9.5。作为应用程序初始化的一部分,我在应用程序启动时使用随机ID在数据库中进行一些插入。类似于插入学生值(1,'abc'),插入学生值(10,'xyz')。然后我开发了一些RESTAPI,它们通过编程插入新行。我们有没有办法告诉postgres跳过已经获取的ID 它试图使用已经使用过的ID。我注意到它没有更新初始插入的顺序 下面是我如何创建表的 CREATE TABLE student( id SERIAL PRIMARY
插入学生值(1,'abc')
,插入学生值(10,'xyz')
。然后我开发了一些RESTAPI,它们通过编程插入新行。我们有没有办法告诉postgres跳过已经获取的ID
它试图使用已经使用过的ID。我注意到它没有更新初始插入的顺序
下面是我如何创建表的
CREATE TABLE student(
id SERIAL PRIMARY KEY,
name VARCHAR(64) NOT NULL UNIQUE
);
您可以将填充
id
列的序列前进到最大值:
insert into student (id, name)
values
(1, 'abc'),
(2, 'xyz');
select setval(pg_get_serial_sequence('student', 'id'), (select max(id) from student));
您可以将填充
id
列的序列前进到最大值:
insert into student (id, name)
values
(1, 'abc'),
(2, 'xyz');
select setval(pg_get_serial_sequence('student', 'id'), (select max(id) from student));
如果您的数据是分布式的,那么使用UUID作为主键值可能会更好。如果您的数据是分布式的,使用UUID作为主键值可能会更好。添加了表定义。当我尝试使用API进行插入时,是否仍然可以使用IDs1和10进行插入,并跳过10?在API中,我使用
插入学生值(默认值为'def')
而不是数字ID。添加了表定义。当我尝试使用API进行插入时,是否仍然可以使用IDs1和10进行插入,并跳过10?在API中,我使用插入学生值(默认值为'def')
,而不是数字ID。我同意这是可行的。但问题是,我数据库中的数据是分布式的。我有身份证。1、10、20、30、40等等。有没有可能让id=2到9,然后跳到11?@love2code:这是一个全新的问题。是的,如果您手动控制序列并使用增量2而不是1,您可以这样做。如果问题不是很清楚,但这是我的原始问题,请担心++如果序列被1值跳过,则2将起作用。但如果我有随机ID。fr-eg:10,20,21,30,31,32,33,35,40,45等等++2不会work@love2code对不起,你把我弄丢了。“我不知道你想干什么。”一匹没有名字的马,我想他想避开洞。没有问题。我同意这是可行的。但问题是,我数据库中的数据是分布式的。我有身份证。1、10、20、30、40等等。有没有可能让id=2到9,然后跳到11?@love2code:这是一个全新的问题。是的,如果您手动控制序列并使用增量2而不是1,您可以这样做。如果问题不是很清楚,但这是我的原始问题,请担心++如果序列被1值跳过,则2将起作用。但如果我有随机ID。fr-eg:10,20,21,30,31,32,33,35,40,45等等++2不会work@love2code对不起,你把我弄丢了。“我不知道你想干什么。”一匹没有名字的马,我想他想避开洞。没有问题。叹息