重置 postgres 序列以获取未使用的主键 ID

Reset postgres sequence to take un-used primary key ids

我正在使用 postgres 9.5。作为应用程序初始化的一部分,我在应用程序启动时使用随机 ID 在数据库中插入了一些内容。像 insert into student values(1,'abc') , insert into student values(10,'xyz') 这样的东西。然后我开发了一些以编程方式插入新行的其余 API。有什么办法可以告诉 postgres 跳过已经使用的 ID?

它试图占用已经使用过的 ID。我注意到它没有更新初始插入的序列

下面是我如何创建 table

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));

听起来如果您的数据是分布式的,使用 UUID 作为主键值可能会更好。