PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment modifier les REFERENCES dans PostgreSQL ?

Les dépendances internes entre les tables et/ou d'autres objets ne sont jamais liées au nom de l'objet. En interne, chaque objet est stocké dans une table de catalogue et l'OID (clé primaire interne) de l'objet est utilisé pour tout sinon.

En conséquence, une FOREIGN KEY la référence est stockée dans les tables du catalogue pg_constraint (la contrainte elle-même, y compris son nom) et pg_depend . La modification des noms de table n'affectera en rien la fonctionnalité .

Le nom de la contrainte reste inchangée. Vous pouvez ignorer cela ou renommer la contrainte afin qu'elle ne soit pas trompeuse.

Cependant, comme vous n'avez pas spécifié de nom de contrainte au moment de la création, le système a choisi une valeur par défaut, qui est example2_example1fk_fkey dans votre cas, sauf si le nom a été pris. Aucune référence à la table référencée Nom. Mais le nom de colonne devra probablement changer dans votre exemple, aussi. Et ça est utilisé dans le nom de la contrainte.

ALTER TABLE example2 RENAME example1fk TO example3fk;  -- rename column

Dans Postgres 9.2 ou version ultérieure, vous pouvez également renommer la contrainte (comme dequis commenté ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

Dans les anciennes versions, vous devez supprimer et recréer la contrainte pour la renommer, de préférence en une seule instruction :

ALTER TABLE example2  -- rename constraint
   DROP CONSTRAINT example2_example1fk_fkey
 , ADD  CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
      REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;

Détails dans le manuel.