sql >> Databáze >  >> RDS >> PostgreSQL

Změna primárního klíče na složený primární klíč

Můžete přidat redundantní UNIQUE omezení na id než zahodíte PRIMARY KEY omezení. To splňuje požadavek omezení FK. Podle dokumentace:

Tučné zdůraznění moje.

Je zřejmé, že omezení FK je vázáno na omezení PK, se kterým bylo vytvořeno explicitně v pg_depend . Takže musíte zrušit a později znovu vytvořit všechna odkazující omezení FK nebo si pohrát se systémovými tabulkami (což není vhodné!). Nejlepší v jedné transakci zachovat referenční integritu nedotčenou:

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. (S dotazy na zobrazení katalogových položek poskytujících mimo jiné jména.)

Podrobnosti v příručce na ALTER TABLE .

To má smysl pouze jako přechodný stav. Pokud id zůstane UNIQUE NOT NULL , může to být také PK.



  1. Použití více databází v rámci CodeIgniter

  2. Deklarujte chybu syntaxe v MYSQL Workbench

  3. Vypsat granty a oprávnění pro materializovaný pohled v PostgreSQL

  4. Jak vložit speciální znaky do databáze?