sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför uppdateras inte sekvenser när COPY utförs i PostgreSQL?

Du frågar:

Ja, du borde, som dokumenterat här :

Du skriver:

Men så är det inte! :) När du utför en normal INSERT anger du vanligtvis inte ett explicit värde för den SEQUENCE-stödda primärnyckeln. Om du gjorde det skulle du stöta på samma problem 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.

Ditt COPY-kommando tillhandahåller naturligtvis ett explicit id värde, precis som exemplet INSERT ovan.



  1. doktrin - hämta nästa och föregående rekord

  2. Hur säkerställer man inga luckor i auto_increment-tal?

  3. Lägga till, ta bort och redigera användare av admin i php

  4. Postgres analog till CROSS APPLY i SQL Server