无法将新行插入到postgres数据库表中?

问题描述:

我有一个问题,我试图插入新行到一个Postgres数据库表,并收到以下错误无法将新行插入到postgres数据库表中?

ERROR: duplicate key violates unique constraint "n_clients_pkey" 

这里我查询

insert into n_clients(client_name) values('value'); 

我使用的Postgres 8.1。 11

PostgreSQL 8.1.11 on x86_64-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14) 

下面是我的表结构

           Table "public.n_clients" 
    Column |   Type   |        Modifiers        
-------------+--------------------------+----------------------------------------------------------------------- 
id   | integer     | not null default nextval(('public.n_clients_id_seq'::text)::regclass) 
client_name | character varying(200) | not null 
moddate  | timestamp with time zone | default now() 
createdate | timestamp with time zone | default now() 
Indexes: 
    "n_clients_pkey" PRIMARY KEY, btree (id) 

和序列

Sequence "public.n_clients_id_seq" 
Column  | Type 

--------------- + --------- SEQUENCE_NAME |名字 last_value | bigint increment_by | bigint max_value | bigint min_value | bigint cache_value | bigint log_cnt | bigint is_cycled |布尔值 is_called | boolean

+0

你能为n_clients表添加您的CREATE TABLE命令。 – 2009-09-23 11:06:17

+0

我更新了我的问题,请看我的表格结构 – Roland 2009-09-23 11:08:32

该行已经存在,因此不能将其插入。你们关系的主要关键是什么?这是一个序列吗?如果是这样,也许它卡住了(也许你导入的数据)。你应该手动将它重置为下一个可用的空闲ID(例如,如果最大ID是41,你应该这样做:SELECT setval('your_seq',42);)然后再试一次。

+0

序列卡住了 – Roland 2009-09-23 11:10:01

您的表必须有UNIQUE constraint,表明您的插入是违反的 - 即考虑您的表和索引的名称,您可能试图插入表中已存在的客户端。

典型地,一个通过手动添加的记录与针对序列中的当前值相匹配的id字段进入这种情况。例如,通过一些常见的转储/重新加载操作很容易介绍这一点。我在Fixing Sequences的整个数据库中写了一篇关于纠正这类错误的文章。

跆拳道是你与8.1版本从一个世纪前在做什么? 8.4显示一个更好的错误消息:

错误:重复键值违反唯一约束 “master_pkey” 详细信息:按键(ID)=(1)已经存在。