Sql 自动递增失败

Sql 自动递增失败,sql,postgresql,sql-insert,Sql,Postgresql,Sql Insert,我在下面的代码中创建了一个表: CREATE TABLE "salesorderdetail" ( "salesorderid" SERIAL NOT NULL , "salesorderdetailid" SERIAL PRIMARY KEY, "orderqty" int NOT NULL, "productid" int NOT NULL, "unitprice" flo

我在下面的代码中创建了一个表:

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文件导入到表中。我想在表中插入一条新记录,但我一直遇到这个错误

错误:重复的键值违反唯一约束 “salesorderdetail\u pkey”详细信息:键(salesorderdetailid)=(2)已存在 存在。 **********错误**********

错误:重复的键值违反唯一约束 “salesorderdetail_pkey”SQL状态:23505详细信息:键 (salesorderdetailid)=(2)已存在

我试图通过执行以下查询来更改表的顺序

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
在我自己的实例中,序列默认名称默认为saleorderdetail\u saleorderdetailid\u seq。除非您明确地更改它,否则我猜您的CSV内容中的某些内容(似乎不太可能)或上面查询中序列的命名都是问题所在。有趣的是,当我尝试重新启动这个不存在的序列时,PG没有返回任何错误

所以-试试这个

alter sequence salesorderdetail_salesorderdetailid_seq RESTART with 75124;

您的alter代码显示了
saleorderid
,但错误出现在
saleorderdetailid
是的,我犯了一个错误,现在它是正确的!我认为您的思路是正确的,但是您可以在
psql
\d saleorderdetail
查找序列的调用。对于已经有
serial
列的表来说,创建序列是没有意义的,
serial
列毕竟是自己创建序列的。@muistooshort很好,创建序列是多余的。我不知道\d技巧-谢谢:)