PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Промяна (актуализация) на уникални стойности на колони в PostgreSQL

Това наистина е малко объркващо, тъй като всички други ограничения се оценяват на ниво израз, само PK/уникално ограничение се оценяват на ниво ред по време на DML операции.

Но можете да заобиколите това, като декларирате ограничението на първичния ключ като отлагаемо:

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;

Отложените ограничения имат някои допълнителни разходи, така че като ги дефинирате като initially immediate тези режийни разходи са сведени до минимум. Можете да отложите оценката на ограничението, когато имате нужда от нея, като използвате set constraint .

Истинският въпрос обаче е:защо трябва да правите това на стойност на първичен ключ? PK стойностите нямат никакво значение, така че изглежда доста ненужно да се увеличават всички стойности (независимо от използваната СУБД)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hibernate вмъкване на пакет с разделен postgresql

  2. какво е значението на тази грешка на postgres:ROWS не е приложимо, когато функцията не връща набор

  3. Вмъкване на NULL/празен низ с помощта на библиотеката libpqxx

  4. Откриване на дублиращи се елементи в рекурсивния CTE

  5. как да коригирате OperationalError:(psycopg2.OperationalError) сървърът затвори връзката неочаквано