sql >> Database >  >> RDS >> PostgreSQL

Shift (update) unieke kolomwaarden in PostgreSQL

Dit is inderdaad een beetje verwarrend omdat alle andere beperkingen worden geëvalueerd op instructieniveau, en alleen PK/unieke beperkingen worden geëvalueerd op rijniveau tijdens DML-bewerkingen.

Maar u kunt dat omzeilen door de primaire sleutelbeperking als uitstelbaar te verklaren:

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;

Uitgestelde beperkingen hebben enige overhead, dus door het te definiëren als initially immediate deze overhead wordt tot een minimum beperkt. U kunt de evaluatie van de beperking uitstellen wanneer u deze nodig heeft met behulp van set constraint .

De echte vraag is echter:waarom zou je dit op een primaire sleutelwaarde moeten doen? De PK-waarden hebben geen enkele betekenis, dus het lijkt nogal onnodig om alle waarden te verhogen (ongeacht het DBMS dat wordt gebruikt)



  1. op zoek naar een meer pythonische manier om toegang te krijgen tot de database

  2. Is er een MySQL-equivalent aan Oracle's TIMESTAMP WITH TIME ZONE?

  3. python manage.py migreren brengt geen wijzigingen aan in de postgres-database

  4. mySQL Herhaalde Evenementen Query