我正在运行Posgres 8.4,我有下表
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 :(得分:1)
我明白了。我之前做过一个包含id值的插入,我知道这个值是唯一的。这样做不会增加用于递增主键值的序列。更新序列值可以解决问题。