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

Промяна на първичен ключ на съставен първичен ключ

Можете да добавите излишен UNIQUE ограничение на id преди да пуснете PRIMARY KEY ограничение. Това удовлетворява изискването за FK ограничения. Съгласно документацията:

Удебелен акцент е мой.

Очевидно FK ограничението е обвързано с PK ограничението, с което е създадено изрично в pg_depend . Така че трябва да премахнете и по-късно да пресъздадете всички препращащи FK ограничения или да се забърквате със системните таблици (което не е препоръчително!). Най-доброто в една транзакция за да запазите референтната цялост непокътната:

BEGIN;
ALTER TABLE bar DROP CONSTRAINT bar_id_foo_fkey;

ALTER TABLE foo 
    DROP CONSTRAINT foo_pkey
  , ADD CONSTRAINT foo_uni_id UNIQUE (id)
  , ADD PRIMARY KEY (id, id2);

ALTER TABLE bar ADD CONSTRAINT bar_id_foo_fkey
  FOREIGN KEY (id) REFERENCES foo (id);

COMMIT;

SQL Fiddle. (Със заявки за показване на записи в каталога, предоставящи имена наред с други неща.)

Подробности в ръководството за ALTER TABLE .

Това има смисъл само като междинно състояние. Ако id остава UNIQUE NOT NULL , може и да е 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. Размерът на базата данни на PostgreSQL се увеличава

  2. Задайте ограничение на array_agg()

  3. Разрешението за дъмп на Postgresql е отказано

  4. pgmemcache срещу безкраен кеш

  5. Как да получите записи, създадени в текущия месец?