Interne afhankelijkheden tussen tabellen en/of andere objecten zijn nooit gebonden aan de objectnaam. Intern wordt elk object opgeslagen in een catalogustabel en wordt de OID (interne primaire sleutel) van het object gebruikt voor alles anders.
Dienovereenkomstig, een FOREIGN KEY
referentie wordt opgeslagen in de catalogustabellen pg_constraint
(de beperking zelf incl. de naam) en pg_depend
. Het wijzigen van tabelnamen heeft geen enkele invloed op de functionaliteit .
De naam van de beperking blijft ongewijzigd. Je kunt dat negeren, of je wilt de beperking misschien een andere naam geven, zodat het niet misleidend is.
Omdat u bij het maken echter geen beperkingsnaam hebt opgegeven, heeft het systeem een standaard gekozen, namelijk example2_example1fk_fkey
in uw geval, tenzij de naam is gebruikt. Geen verwijzing naar de tabel waarnaar wordt verwezen naam. Maar de kolomnaam zal waarschijnlijk ook in uw voorbeeld moeten veranderen. En dat wordt gebruikt in de naam van de beperking.
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
In Postgres 9.2 of hoger kun je de beperking ook gewoon hernoemen (als dequis commentaar ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
In oudere versies moet u de beperking verwijderen en opnieuw maken om de naam ervan te wijzigen, het beste in een enkele instructie:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;