文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 数据库使用/ 向表中插入数据报错:duplicate key value violates unique constraint "%s"
更新时间:2024-07-01 GMT+08:00

向表中插入数据报错: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