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;