sql >> Base de Datos >  >> RDS >> PostgreSQL

Cambiar (actualizar) valores de columna únicos en PostgreSQL

De hecho, esto es un poco confuso, ya que todas las demás restricciones se evalúan a nivel de declaración, solo las restricciones PK/únicas se evalúan a nivel de fila durante las operaciones DML.

Pero puede evitarlo declarando la restricción de clave principal como diferible:

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;

Las restricciones diferidas tienen algunos gastos generales, por lo que al definirlas como initially immediate esta sobrecarga se mantiene al mínimo. Puede diferir la evaluación de la restricción cuando la necesite usando set constraint .

Sin embargo, la verdadera pregunta es:¿por qué necesitaría hacer esto en un valor de clave principal? Los valores de PK no tienen ningún significado, por lo que parece bastante innecesario incrementar todos los valores (independientemente del DBMS que se utilice)