PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przesuń (zaktualizuj) unikalne wartości kolumn w PostgreSQL

Jest to rzeczywiście nieco mylące, ponieważ wszystkie inne ograniczenia są oceniane na poziomie instrukcji, tylko ograniczenia PK/unikalne są oceniane na poziomie wiersza podczas operacji DML.

Możesz jednak obejść ten problem, deklarując ograniczenie klucza podstawowego jako możliwe do odroczenia:

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;

Odroczone ograniczenia mają pewne obciążenie, więc definiując je jako initially immediate ten koszt jest ograniczony do minimum. Możesz odroczyć ocenę ograniczenia, kiedy tego potrzebujesz, używając set constraint .

Prawdziwe pytanie brzmi jednak:dlaczego miałbyś to robić na wartości klucza podstawowego? Wartości PK nie mają żadnego znaczenia, więc wydaje się raczej niepotrzebne zwiększanie wszystkich wartości (niezależnie od używanego DBMS)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy PostgreSQL ma pseudokolumnę jak LEVEL w Oracle?

  2. Kiedy trzeba uruchomić REINDEX w postgresie

  3. Otrzymany obiekt typu org.postgresql.util.PGobject

  4. Jak stworzyć tabelę Postgres z unikalnym połączonym kluczem podstawowym?

  5. Połącz wiele wierszy z różnymi datami z nakładającymi się zmiennymi (aby uchwycić daty pierwszej i ostatniej zmiany)