2016-06-27 13 views
0

Ich benutze PostgreSQL 9.4 und pgAdminIII 1.20 Client. Beim Starten einer INSERT auf einer bestimmten Tabelle, erhalte ich eine Fehlermeldung: Details: the key (gid)=(31509) already exists. (SQL State: 23505).INSERT schlägt fehl, weil Primärschlüssel bereits existiert

Ich gebe keinen gid Wert in dem Befehl, um die Sequenz die Arbeit machen zu lassen: ist

INSERT INTO geo_section (idnum, insee, ident) VALUES (25, '015233', '') ; 

Die Reihenfolge wie folgt definiert:

CREATE SEQUENCE geo_section_gid_seq 
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    START 31509 
    CACHE 1; 
ALTER TABLE geo_section_gid_seq 
    OWNER TO postgres; 

Die folgende Abfrage gibt 34502 :

SELECT max(gid) FROM geo_section ; 

Daher habe ich versucht, die Reihenfolge zu ändern, um seque zu starten nce von 34503:

ALTER SEQUENCE geo_section_gid_seq START 34503 ; 

Ich erhalte eine Erfolgsmeldung, die besagt, dass die Abfrage ordnungsgemäß ausgeführt wurde. Aber die Folge START Parameter bleibt mit 31509 Wert ...

+1

Vielleicht haben Sie vergessen (nach dem Erstellen der Sequenz), um es an geo_section.gid anzuhängen? 'ALTER TABLE ONLY geo_section ALTER SPALTE gid SET DEFAULT nextval ('geo_section_gid_seq' :: regclass); SEQUENCE geo_section_gid_seq VON geo_section.gid OWNED ALTER; ' – joop

Antwort

3

Um den nächsten Wert für die Sequenz verwenden ändern setval Funktion:

 select setval('geo_section_gid_seq'::regclass,34503,false) 

false: wenn Sie der nächste Wert wollen sein 34503

wahr : Wenn Sie möchten, wird der nächste Wert 34504

+0

Vielen Dank, Problem gelöst! – wiltomap