Comment modifier “RÉFÉRENCES” dans PostgreSQL?
Comment puis-je modifier la référence à un tableau dans PostgreSQL lorsque le nom de la table a été changé?
Dire que j'ai:
CREATE TABLE example1 (
id serial NOT NULL PRIMARY KEY,
name varchar(100)
);
CREATE TABLE example2 (
id serial NOT NULL PRIMARY KEY,
example1fk integer REFERENCES example1 (id) DEFERRABLE INITIALLY DEFERRED
);
Plus tard je fais:
ALTER TABLE example1 RENAME TO example3;
La modification de la définition de la contrainte de clé étrangère?
example1fk integer REFERENCES example1 (id) DEFERRABLE INITIALLY DEFERRED,
Tout d'abord, pour vous aider dans la recherche, cela s'appelle une Contrainte de Clé Étrangère. Deuxièmement, je ne suis pas clair ce que vous voulez faire. La contrainte continuera à pointer à la table après un changement de nom - il n'aurait aucun sens pour Postgres pour permettre à point à un nom qui n'existait pas. Ou voulez-vous dire que vous souhaitez renommer la colonne
IMSoP est juste: il n'y a rien d'autre à faire. Postgres prendra soin de tout.
Avez-vous essayé de le renommer et de voir ce qu'il a fait pour les contraintes FK?
example1fk
pour correspondre au nouveau nom de la table?IMSoP est juste: il n'y a rien d'autre à faire. Postgres prendra soin de tout.
Avez-vous essayé de le renommer et de voir ce qu'il a fait pour les contraintes FK?
OriginalL'auteur Jose Luis de la Rosa | 2015-07-14
Vous devez vous connecter pour publier un commentaire.
De dépendances internes entre les tables et /ou d'autres objets ne sont jamais lié le nom de l'objet. En interne, chaque objet est stocké dans le catalogue des tables et des OID (interne clé primaire) de l'objet est utilisé pour tout d'autre.
En conséquence, un
FOREIGN KEY
référence est stockée dans les tables du cataloguepg_constraint
etpg_depend
. Table à langer noms ne pas nuire à la fonctionnalité, à tous les.La nom de la contrainte reste inchangé. Vous pouvez ignorer que, ou vous pouvez renommer la contrainte de sorte qu'il n'est pas trompeuse.
Cependant, puisque vous ne spécifiez pas un nom de contrainte au moment de la création, le système choisi par défaut, qui est
example2_example1fk_fkey
dans votre cas, à moins que le nom a été pris. Aucune référence à l'référencé table nom. Mais le nom de la colonne devra probablement changer dans votre exemple, trop. Et que est utilisé dans le nom de la contrainte.Dans Postgresql 9.2 ou version ultérieure, vous pouvez simplement renommer la contrainte (comme dequis commenté):
Dans les anciennes versions, vous devez supprimer et recréer de la contrainte pour le renommer, le meilleur en une seule instruction:
Les détails dans le manuel.
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey
Bon point, j'ai mis à jour avec une référence à votre commentaire.
OriginalL'auteur Erwin Brandstetter