sql >> Databasteknik >  >> RDS >> PostgreSQL

Ändra en primärnyckel till en sammansatt primärnyckel

Du kan lägga till en redundant UNIQUE begränsningid innan du släpper PRIMARY KEY begränsning. Det uppfyller kravet på FK-begränsningar. Per dokumentation:

Djärv betoning min.

Uppenbarligen är FK-begränsningen bunden till PK-begränsningen den skapades med uttryckligen i pg_depend . Så du måste släppa och senare återskapa alla refererande FK-begränsningar eller bråka med systemtabeller (vilket inte är tillrådligt!). Bäst i en transaktion för att hålla referensintegriteten 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-fiol. (Med frågor för att visa katalogposter med bland annat namn.)

Detaljer i manualen på ALTER TABLE .

Detta är bara vettigt som mellantillstånd. Om id förblir UNIQUE NOT NULL , det kan lika gärna vara PK.



  1. Hur hämtar jag alla rader i min DB?

  2. Stöder SQL Server CLR Integration konfigurationsfiler?

  3. Koaleserar jsonArrayAgg till tom array i jOOQ

  4. hur man förstår kan inte ansluta mysql felmeddelanden?