自动增量失败

时间:2016-06-21 17:42:48

标签: sql postgresql sql-insert

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

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_pkey”详情:Key(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等。

1 个答案:

答案 0 :(得分:2)

(首先,对于没有评论而是回答道歉 - 我还没有足够的评论来评论)

这是一个有趣的问题。我在我自己的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;