0

我正在使用 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     
);
4

2 回答 2

2

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

于 2016-11-18T13:05:45.600 回答
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));
于 2016-11-18T12:41:13.493 回答