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

时间:2016-11-18 12:30:13

标签: postgresql database-sequence

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

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

以下是我创建表的方法

CREATE TABLE student(
    id                  SERIAL PRIMARY KEY,
    name                VARCHAR(64) NOT NULL UNIQUE     
);

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以将填充id列的序列推进到最高值:

insert into student (id, name) 
values 
  (1, 'abc'),
  (2, 'xyz');

select setval(pg_get_serial_sequence('student', 'id'), (select max(id) from student));