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

Jak změnit REFERENCE v PostgreSQL?

Vnitřní závislosti mezi tabulkami a/nebo jinými objekty nejsou nikdy vázány na název objektu. Interně je každý objekt uložen v katalogové tabulce a pro vše se používá OID (interní primární klíč) objektu jinak.

V souladu s tím FOREIGN KEY reference je uložena v tabulkách katalogu pg_constraint (samotné omezení včetně jeho názvu) a pg_depend . Změna názvů tabulek vůbec nenaruší funkčnost .

jméno omezení zůstává nezměněno. Můžete to ignorovat, nebo můžete omezení přejmenovat, aby nebylo zavádějící.

Protože jste však při vytváření nezadali název omezení, systém vybral výchozí, což je example2_example1fk_fkey ve vašem případě, pokud jméno nebylo převzato. Žádný odkaz na odkazovanou tabulku název. Ale název sloupce se pravděpodobně bude muset změnit i ve vašem příkladu. A to se používá v názvu omezení.

ALTER TABLE example2 RENAME example1fk TO example3fk;  -- rename column

V Postgres 9.2 nebo novějším můžete také omezení přejmenovat (jako komentováno dequis ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

Ve starších verzích musíte omezení zrušit a znovu vytvořit, abyste jej přejmenovali, nejlépe jedním příkazem:

ALTER TABLE example2  -- rename constraint
   DROP CONSTRAINT example2_example1fk_fkey
 , ADD  CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
      REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;

Podrobnosti v příručce.




  1. Chyba syntaxe SQL

  2. mysql vytvoří nový řádek namísto aktualizace existujícího

  3. SQLite - Vytvořte tabulku

  4. Aktualizace SQLite