向表中插入数据报错:duplicate key value violates unique constraint "%s"
问题现象
向表中插入数据报错:duplicate key value violates unique constraint "%s"。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE TABLE films ( code char(5) PRIMARY KEY, title varchar(40) NOT NULL, did integer NOT NULL, date_prod date, kind varchar(10), len interval hour to minute ); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "films_pkey" for table "films" CREATE TABLE INSERT INTO films VALUES ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes'); INSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes'); ERROR: dn_6003_6004: duplicate key value violates unique constraint "films_pkey" DETAIL: Key (code)=(UA502) already exists. |
原因分析
创建表films时带有主键约束,使用PRIMARY KEY声明主键code,即表中的code字段只能包含唯一的非NULL值。同时主键会为表films创建索引films_pkey。
插入表中的数据code字段值UA502与表中已存在的中code字段值重复,因此插入数据报错。
处理方法
- 方法一:检查数据冲突,修改插入数据。例如,修改示例重复字段UA502为UA509。
1 2
INSERT INTO films VALUES ('UA509', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes'); INSERT 0 1
- 方法二:删除表films主键约束。
1 2 3 4
ALTER TABLE films DROP CONSTRAINT films_pkey; ALTER TABLE INSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes'); INSERT 0 1