sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvorfor opdateres sekvenser ikke, når COPY udføres i PostgreSQL?

Du spørger:

Ja, det bør du, som dokumenteret her :

Du skriver:

Men sådan er det ikke! :) Når du udfører en normal INSERT, angiver du typisk ikke en eksplicit værdi for den SEQUENCE-støttede primærnøgle. Hvis du gjorde det, ville du løbe ind i de samme problemer, som du har nu:

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.

Din COPY-kommando leverer selvfølgelig et eksplicit id værdi, ligesom eksemplet INSERT ovenfor.



  1. Få en liste over databaser fra SQL Server

  2. Hvordan sletter man en attribut fra en XML-variabel i sql server 2008?

  3. UPSERT i PostgreSQL ved hjælp af jOOQ

  4. bedste måde at importere data til mysql