由于顺序乱序,无法在 Postgres 中插入 table

Unable to insert table in Postgres due to sequence being out of order

我有一个叫 table 的人,ID 为 primary key

我正在尝试插入此 table 中:

insert into person (first_name, last_name, email, gender, date_of_birth, country_of_birth) values ('Ellissa', 'Gordge', 'ggordge0@gnu.org', 'Male', '2022-03-19', 'Fiji');

不应该有任何 ID 约束被违反,因为它是 BIGSERIAL 但我得到这个:

它说密钥 id=(8) 已经存在,并且在每次尝试 运行 此命令时递增。 ID怎么可能已经存在了?为什么它不从列表底部递增?

如果我在插入语句中指定 id,并使用我知道唯一的数字,它就可以工作。我只是不明白为什么它不自动执行,因为我正在使用 BIGSERIAL.

SELECT pg_catalog.setval(pg_get_serial_sequence('table_name', 'id'), MAX(id)) FROM table_name;

这应该会启动您的序列 table 恢复同步,这应该会解决所有问题。确保将 'table_name' 更改为实际名称。干杯!

您的序列显然与列中的值不同步。当有人做了 INSERT INTO person(id, …) VALUES (8, …)(或者可能是 csv COPY 导入,或者任何其他为 id 列提供值而不是使用默认值的东西),或者当有人重置时,就会发生这种情况插入数据的顺序。

您可以alter the sequence解决这个问题:

ALTER SEQUENCE person_id_seq RESTART WITH (SELECT MAX(id)+1 FROM person);

您可以set the sequence value解决这个问题:

SELECT setval('person_id_seq', MAX(id)+1) FROM person;

另请注意,避免此类问题。