PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que as sequências não são atualizadas quando o COPY é executado no PostgreSQL?


Você pergunta:

Sim, você deve, conforme documentado aqui :

Você escreve:

Mas isso não é assim! :) Quando você executa um INSERT normal, normalmente você não especifica um valor explícito para a chave primária apoiada por SEQUENCE. Se o fizesse, teria os mesmos problemas que está tendo agora:
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.

Seu comando COPY, é claro, está fornecendo um id explícito valor, assim como o exemplo INSERT acima.