我有一个在下面的代码中创建的表:
CREATE TABLE "salesorderdetail" (
"salesorderid" SERIAL NOT NULL ,
"salesorderdetailid" SERIAL PRIMARY KEY,
"orderqty" int NOT NULL,
"productid" int NOT NULL,
"unitprice" float NOT NULL,
"unitpricediscount" float NOT NULL,
"linetotal" float NOT NULL
) WITH (
OIDS=FALSE
);
此外,我还将记录从 csv 文件导入到表中。我想向表中插入一条新记录,但不断收到此错误
ERROR: duplicate key value violates unique constraint "salesorderdetail_pkey" DETAIL: Key (salesorderdetailid)=(2) already exists. ********** Error **********
ERROR: duplicate key value violates unique constraint "salesorderdetail_pkey" SQL state: 23505 Detail: Key (salesorderdetailid)=(2) already exists.
我尝试通过执行以下查询来更改表的顺序。
SELECT MAX("salesorderdetailid") FROM "salesorderdetail"; --Output is 75123
CREATE SEQUENCE user_id_seq;
ALTER SEQUENCE user_id_seq RESTART WITH 75124; --Hence I manually enter 75124
然后我再次尝试插入查询:
INSERT INTO "salesorderdetail" (orderqty,productid,unitprice,unitpricediscount,linetotal) values (1,1,8.00,0,8.00);
我仍然收到此错误!我还注意到,每次尝试执行插入查询时,重复键值都会自动增加 3、4、5、6 等。
最佳答案
(首先,抱歉没有发表评论而是回答 - 我还没有足够的观点来发表评论)
这是一个有趣的问题。我在我自己的 PostGres 沙箱实例上执行了您的所有代码,并且在架构中插入任何新数据没有任何问题。
我确实注意到这个代码块有问题
SELECT MAX("salesorderdetailid") FROM "salesorderdetail"; --Output is 75123
CREATE SEQUENCE user_id_seq;
ALTER SEQUENCE user_id_seq RESTART WITH 75124; --Hence I manually enter 75124
在我自己的实例中,序列默认名称默认为salesorderdetail_salesorderdetailid_seq。除非您明确更改它,否则我猜测 CSV 内容中的某些内容(似乎不太可能)或上面查询中的序列命名都是问题。有趣的是,当我尝试重新启动这个不存在的序列时,PG 没有返回任何错误。
所以 - 试试这个吧
alter sequence salesorderdetail_salesorderdetailid_seq RESTART with 75124;
关于sql - 自动增量失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951140/