重置 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 作为主键值可能会更好。
我正在使用 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 作为主键值可能会更好。