PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Deslocar (atualizar) valores de coluna exclusivos no PostgreSQL


Isso é realmente um pouco confuso, pois todas as outras restrições são avaliadas em um nível de instrução, apenas a restrição PK/única é avaliada em um nível por linha durante as operações DML.

Mas você pode contornar isso declarando a restrição de chave primária como adiável:
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;

As restrições adiadas têm alguma sobrecarga, portanto, definindo-a como initially immediate esta sobrecarga é reduzida ao mínimo. Você pode adiar a avaliação da restrição quando precisar usando set constraint .

A verdadeira questão, no entanto, é:por que você precisaria fazer isso em um valor de chave primária? Os valores de PK não têm nenhum significado, então parece desnecessário incrementar todos os valores (independentemente do DBMS que está sendo usado)