Le dipendenze interne tra tabelle e/o altri oggetti non sono mai legate al nome dell'oggetto. Internamente, ogni oggetto è memorizzato in una tabella di catalogo e l'OID (chiave primaria interna) dell'oggetto è utilizzato per tutto altro.
Di conseguenza, una FOREIGN KEY
il riferimento è memorizzato nelle tabelle del catalogo pg_constraint
(il vincolo stesso include il suo nome) e pg_depend
. La modifica dei nomi delle tabelle non comprometterà affatto la funzionalità .
Il nome del vincolo rimane invariato. Puoi ignorarlo o rinominare il vincolo in modo che non sia fuorviante.
Tuttavia, poiché non hai specificato un nome di vincolo al momento della creazione, il sistema ha scelto un valore predefinito, che è example2_example1fk_fkey
nel tuo caso a meno che non sia stato preso il nome. Nessun riferimento alla tabella di riferimento nome. Ma il nome della colonna probabilmente dovrà cambiare anche nel tuo esempio. E quello viene utilizzato nel nome del vincolo.
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
In Postgres 9.2 o versioni successive puoi semplicemente rinominare anche il vincolo (come dequis ha commentato ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
Nelle versioni precedenti, devi eliminare e ricreare il vincolo per rinominarlo, meglio in una singola istruzione:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;