PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi les séquences ne sont-elles pas mises à jour lorsque COPY est exécuté dans PostgreSQL ?

Vous demandez :

Oui, vous devriez, comme documenté ici :

Vous écrivez :

Mais ce n'est pas le cas! :) Lorsque vous effectuez un INSERT normal, vous ne spécifiez généralement pas de valeur explicite pour la clé primaire sauvegardée par SEQUENCE. Si vous le faisiez, vous rencontreriez les mêmes problèmes que ceux que vous rencontrez actuellement :

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.

Votre commande COPY, bien sûr, fournit un id explicite valeur, comme dans l'exemple INSERT ci-dessus.