sql >> Database >  >> RDS >> PostgreSQL

Een primaire sleutel wijzigen in een samengestelde primaire sleutel

U kunt een redundante UNIEK beperking op id voordat u de PRIMARY KEY . laat vallen beperking. Dat voldoet aan de eis van FK-beperkingen. Per documentatie:

Vetgedrukte nadruk van mij.

Het is duidelijk dat de FK-beperking gebonden is aan de PK-beperking waarmee deze expliciet is gemaakt in pg_depend . U moet dus alle FK-beperkingen die verwijzen naar FK verwijderen en later opnieuw maken of knoeien met systeemtabellen (wat niet aan te raden is!). Beste in één transactie om de referentiële integriteit intact te houden:

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. (Met zoekopdrachten om catalogusitems te tonen die onder andere namen bevatten.)

Details in de handleiding op ALTER TABLE .

Dit heeft alleen zin als tussentoestand. Als id blijft UNIEK NIET NUL , het kan net zo goed de PK zijn.



  1. ODBC-gegevens analyseren in IBM SPSS

  2. InsertAllOnSubmit voegt alleen eerste gegevensrecord in

  3. PostgreSQL FOUT:42P01:relatie [Tabel] bestaat niet

  4. mysql meerdere instanties