由于顺序乱序,无法在 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;
另请注意,避免此类问题。
我有一个叫 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;
另请注意,