Postgres veritabanı tabloya yeni bir satır eklemek değil miyim?

3 Cevap php

Ben bir sorun var, ben bir postgres veritabanı tabloya yeni bir satır eklemek ve aşağıdaki hatayı almaya çalışıyorum

ERROR:  duplicate key violates unique constraint "n_clients_pkey"

İşte benim sorgu

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

Ben postgres 8.1.11 kullanıyorum

 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)

İşte benim tablo yapısı var

                                                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)

ve sekans

Sequence "public.n_clients_id_seq"
Column     |  Type

---------------+--------- sequence_name | name last_value | bigint increment_by | bigint max_value | bigint min_value | bigint cache_value | bigint log_cnt | bigint is_cycled | boolean is_called | boolean

3 Cevap

Bu satır zaten var, bu nedenle eklemek olamaz. Lütfen ilişkinin birincil anahtar nedir? Bir sekans var mı? Eğer öyleyse, belki de (belki veri ithal) takıldı. Sen maksimum ID 41 ise, yapmanız gereken, örneğin (mevcut sonraki serbest kimliği elle sıfırlamak gerekir: setval ('your_seq', 42) SEÇ ;) daha sonra tekrar deneyin.

Yani, tablo ve dizin adını dikkate alınarak, büyük olasılıkla zaten masada bulunan bir istemci eklemek için çalışıyoruz - Sen uç ihlal ettiğini, masada bir UNIQUE constraint olmalıdır.

Tipik bir el dizisi için geçerli değerle eşleşen id alanı ile bir rekor ekleyerek bu durumun içine alır. Örneğin bazı ortak dökümü / reload işlemleri ile bu tanıtmak kolaydır. I Fixing Sequences de tüm veritabanı genelinde hata için bu tür düzeltme hakkında bir makale yazdı.