2009-09-23 101 views
0

我有一個問題,我試圖插入新行到一個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

回答

6

該行已經存在,因此不能將其插入。你們關係的主要關鍵是什麼?這是一個序列嗎?如果是這樣,也許它卡住了(也許你導入的數據)。你應該手動將它重置爲下一個可用的空閒ID(例如,如果最大ID是41,你應該這樣做:SELECT setval('your_seq',42);)然後再試一次。

+0

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

0

您的表必須有UNIQUE constraint,表明您的插入是違反的 - 即考慮您的表和索引的名稱,您可能試圖插入表中已存在的客戶端。

0

典型地,一個通過手動添加的記錄與針對序列中的當前值相匹配的id字段進入這種情況。例如,通過一些常見的轉儲/重新加載操作很容易介紹這一點。我在Fixing Sequences的整個數據庫中寫了一篇關於糾正這類錯誤的文章。

0

跆拳道是你與8.1版本從一個世紀前在做什麼? 8.4顯示一個更好的錯誤消息:

錯誤:重複鍵值違反唯一約束 「master_pkey」 詳細信息:按鍵(ID)=(1)已經存在。