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

Décaler (mettre à jour) les valeurs de colonne uniques dans PostgreSQL

C'est en effet un peu déroutant car toutes les autres contraintes sont évaluées au niveau de l'instruction, seules les contraintes PK/unique sont évaluées au niveau de la ligne lors des opérations DML.

Mais vous pouvez contourner ce problème en déclarant la contrainte de clé primaire comme différée :

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;

Les contraintes différées ont une certaine surcharge, donc en les définissant comme initially immediate ce surcoût est réduit au minimum. Vous pouvez ensuite différer l'évaluation de la contrainte lorsque vous en avez besoin en utilisant set constraint .

La vraie question est cependant :pourquoi auriez-vous besoin de faire cela sur une valeur de clé primaire ? Les valeurs PK n'ont aucune signification, il semble donc plutôt inutile d'incrémenter toutes les valeurs (quel que soit le SGBD utilisé)