PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum werden Sequenzen nicht aktualisiert, wenn COPY in PostgreSQL ausgeführt wird?

Sie fragen:

Ja, das sollten Sie, wie hier dokumentiert :

Du schreibst:

Aber dem ist nicht so! :) Wenn Sie ein normales INSERT ausführen, geben Sie normalerweise keinen expliziten Wert für den SEQUENCE-unterstützten Primärschlüssel an. Wenn Sie das täten, würden Sie auf die gleichen Probleme stoßen wie jetzt:

postgres=> create table uh_oh (id serial not null primary key, data char(1));
NOTICE:  CREATE TABLE will create implicit sequence "uh_oh_id_seq" for serial column "uh_oh.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "uh_oh_pkey" for table "uh_oh"
CREATE TABLE
postgres=> insert into uh_oh (id, data) values (1, 'x');
INSERT 0 1
postgres=> insert into uh_oh (data) values ('a');
ERROR:  duplicate key value violates unique constraint "uh_oh_pkey"
DETAIL:  Key (id)=(1) already exists.

Ihr COPY-Befehl liefert natürlich eine explizite id Wert, genau wie im obigen Beispiel INSERT.