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

Sposta (aggiorna) i valori di colonna univoci in PostgreSQL

Questo crea effettivamente un po' di confusione poiché tutti gli altri vincoli vengono valutati a livello di istruzione, solo il vincolo PK/unique viene valutato a livello di riga durante le operazioni DML.

Ma puoi aggirare il problema dichiarando il vincolo della chiave primaria come differibile:

create table tbl_test 
(
  testkey   INTEGER,
  constraint pk_tbl_test primary key (testkey) deferrable initially immediate
);

insert into tbl_test values (1), (2);

set constraints all deferred;

update tbl_test
   set testkey = testkey +1;

I vincoli posticipati hanno un sovraccarico, quindi definendolo come initially immediate questo sovraccarico è ridotto al minimo. Puoi posticipare la valutazione del vincolo quando ne hai bisogno usando set constraint .

La vera domanda, tuttavia, è:perché dovresti farlo su un valore di chiave primaria? I valori PK non hanno alcun significato, quindi sembra piuttosto inutile incrementare tutti i valori (indipendentemente dal DBMS utilizzato)