PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie ändert man REFERENZEN in PostgreSQL?

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;

Details im Handbuch.