Interne Abhängigkeiten zwischen Tabellen und/oder anderen Objekten sind niemals an den Objektnamen gebunden. Intern wird jedes Objekt in einer Katalogtabelle gespeichert und die OID (interner Primärschlüssel) des Objekts wird für alles verwendet sonst.
Dementsprechend ein FOREIGN KEY
Referenz wird in den Katalogtabellen pg_constraint
gespeichert
(die Einschränkung selbst inkl. ihres Namens) und pg_depend
. Das Ändern von Tabellennamen beeinträchtigt die Funktionalität überhaupt nicht .
Der Name der Beschränkung bleibt unverändert. Sie können dies ignorieren oder die Einschränkung umbenennen, damit sie nicht irreführend ist.
Da Sie jedoch zum Zeitpunkt der Erstellung keinen Beschränkungsnamen angegeben haben, hat das System einen Standardwert ausgewählt, nämlich example2_example1fk_fkey
in Ihrem Fall, es sei denn, der Name wurde vergeben. Kein Verweis auf die referenzierte Tabelle Name. Aber der Spaltenname wird sich wahrscheinlich auch in Ihrem Beispiel ändern müssen. Und das wird im Beschränkungsnamen verwendet.
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
In Postgres 9.2 oder höher können Sie die Einschränkung auch einfach umbenennen (als dequis kommentiert ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
In älteren Versionen müssen Sie die Einschränkung löschen und neu erstellen, um sie umzubenennen, am besten in einer einzigen Anweisung:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;