2011-12-06 4 views
0

私はPosgres 8.4を実行していると私は、次の表pkが挿入から除外されたときに、Postgresのシリアルpkを含むselectの挿入が重複pkエラーを生成するのはなぜですか?私は次のクエリを実行しようとしたとき

CREATE TABLE communitynetwork_listitem 
(
    id serial NOT NULL, 
    "MdUsr" integer, 
    "MdDT" timestamp with time zone NOT NULL, 
    "CrUsr" integer, 
    "CrDT" timestamp with time zone NOT NULL, 
    category_id character varying(15) NOT NULL, 
    "name" character varying(200) NOT NULL, 
    "order" integer NOT NULL, 
    "extraInfo" boolean NOT NULL, 
    "multiLineInfo" boolean NOT NULL, 
    "descrLabel" character varying(50) NOT NULL, 
    "decimalReq" boolean NOT NULL, 
    "decimalLabel" character varying(50) NOT NULL, 
    "decimalLabelDisplay" character varying(50) NOT NULL, 
    "descrLabelDisplay" character varying(50) NOT NULL, 
    CONSTRAINT communitynetwork_listitem_pkey PRIMARY KEY (id), 
    CONSTRAINT "category_id_refs_catId_69f2992c" FOREIGN KEY (category_id) 
     REFERENCES communitynetwork_listcategory ("catId") MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED, 
    CONSTRAINT communitynetwork_listitem_category_id_64fdc58a_uniq UNIQUE (category_id, name) 
) 
WITH (
    OIDS=FALSE 
); 

を持って、それは私がcommunitynetwork_listitem_pkey制約に違反していることを言って私にエラーを与えました。それがなぜ起こっているのでしょうか?

insert into communitynetwork_listitem ("MdUsr", "MdDT", "CrUsr", "CrDT", category_id, name, "order", "extraInfo", "multiLineInfo", "descrLabel", "decimalReq", "decimalLabel", "decimalLabelDisplay", "descrLabelDisplay") 
select "MdUsr", "MdDT", "CrUsr", "CrDT", category_id, name, 0, "extraInfo", "multiLineInfo", "descrLabel", "decimalReq", "decimalLabel", "decimalLabelDisplay", "descrLabelDisplay" 
    from communitynetwork_listitem_import liImp 
where not exists (select * 
        from communitynetwork_listitem li 
        where li.name = liImp.name 
         and li.category_id = liImp.category_id) 
+0

私はcommunitynetwork_listitem_pkey違反に驚いていますが、(名前、カテゴリ)がソーステーブル内で一意でない場合、communitynetwork_listitem_category_id_64fdc58a_uniqに違反が見られる可能性があります –

答えて

1

私はそれを理解しました。以前はユニークな場所で知っていたid値を含んだインサートを行っていました。これを実行しても、プライマリキー値をインクリメントするために使用されるシーケンスはインクリメントされません。シーケンス値を更新することで問題は解決しました。

関連する問題