【发布时间】:2018-11-01 07:48:59
【问题描述】:
我在使用 Postgres 表时遇到了一个特殊问题。当我尝试执行一个简单的INSERT 时,它返回一个错误 - duplicate key value violates unique constraint。
首先,这是表的架构:
CREATE TABLE app.guardians
(
guardian_id serial NOT NULL,
first_name character varying NOT NULL,
middle_name character varying,
last_name character varying NOT NULL,
id_number character varying NOT NULL,
telephone character varying,
email character varying,
creation_date timestamp without time zone NOT NULL DEFAULT now(),
created_by integer,
active boolean NOT NULL DEFAULT true,
occupation character varying,
address character varying,
marital_status character varying,
modified_date timestamp without time zone,
modified_by integer,
CONSTRAINT "PK_guardian_id" PRIMARY KEY (guardian_id ),
CONSTRAINT "U_id_number" UNIQUE (id_number )
)
WITH (
OIDS=FALSE
);
ALTER TABLE app.guardians
OWNER TO postgres;
该表有 400 行。现在假设我尝试执行这个简单的INSERT:
INSERT INTO app.guardians(first_name, last_name, id_number) VALUES('This', 'Fails', '123456');
我得到错误:
ERROR: duplicate key value violates unique constraint "PK_guardian_id"
DETAIL: Key (guardian_id)=(2) already exists.
如果我再次尝试运行相同的查询,错误消息的详细信息将是:
DETAIL: Key (guardian_id)=(3) already exists.
和
DETAIL: Key (guardian_id)=(4) already exists.
递增直到它到达一个不存在的guardian_id。
这张特定的桌子上可能出了什么问题,如何纠正?我认为这可能与之前使用cascade 删除表并重新输入数据有关,但我不确定这个理论。
【问题讨论】:
-
尝试重启你的序列
alter sequence "PK_guardian_id" start with (select max(quardian_id) + 1 from app.guardians) -
谢谢。这实际上对我有用。您可以将其发布为答案,以便我将其标记为答案。
-
我很高兴该评论对您有所帮助:) 我已将其发布为答案
标签: postgresql postgresql-9.1 cascade insert-into