PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come modificare i RIFERIMENTI in PostgreSQL?

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;

Dettagli nel manuale.