sql >> Databasteknik >  >> RDS >> PostgreSQL

Skift (uppdatera) unika kolumnvärden i PostgreSQL

Detta är verkligen lite förvirrande eftersom alla andra begränsningar utvärderas på en satsnivå, endast PK/unik begränsning utvärderas på en radnivå under DML-operationer.

Men du kan komma runt det genom att förklara den primära nyckelbegränsningen som uppskjuten:

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;

Uppskjutna begränsningar har viss omkostnad, så genom att definiera den som initially immediate denna omkostnad hålls till ett minimum. Du kan skjuta upp begränsningsutvärderingen när du behöver den genom att använda set constraint .

Den verkliga frågan är dock:varför skulle du behöva göra detta på ett primärt nyckelvärde? PK-värdena har ingen som helst betydelse, så det verkar ganska onödigt att öka alla värden (oavsett vilken DBMS som används)



  1. Hur uppgraderar jag PostgreSQL från version 9.6 till version 10.1 utan att förlora data?

  2. Kan jag dela en fråga i flera frågor eller skapa parallellism för att påskynda en fråga?

  3. Google Maps API v3:Hur ställer man in zoomnivå och kartcenter till användarinlämnad plats?

  4. skapa ett slumptal med MYSQL