sql >> Database teknologi >  >> RDS >> PostgreSQL

Ændring af en primærnøgle til en sammensat primærnøgle

Du kan tilføje en redundant UNIQUE begrænsningid før du slipper PRIMARY KEY begrænsning. Det opfylder FK-kravet. Pr. dokumentation:

Fed fremhævelse mine.

Det er klart, at FK-begrænsningen er bundet til den PK-begrænsning, den blev oprettet med eksplicit i pg_depend . Så du skal droppe og senere genskabe alle refererende FK-begrænsninger eller rode med systemtabeller (hvilket ikke er tilrådeligt!). Bedst i én transaktion at holde referenceintegriteten intakt:

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. (Med forespørgsler om at vise katalogindgange, der blandt andet giver navne.)

Detaljer i manualen på ALTER TABLE .

Dette giver kun mening som mellemtilstand. Hvis id forbliver UNIQUE NOT NULL , det kan lige så godt være PK.



  1. Brug af 'end' som kolonnenavn i Ruby on Rails (MySQL)

  2. Sådan falder du bordet i oracle

  3. hvad er og hvordan fjerner jeg tablespace-fejl fra min database?

  4. Tovejs begrænsning af fremmednøgle