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

L'ajout d'une colonne en tant que clé étrangère donne ERROR la ​​colonne référencée dans la contrainte de clé étrangère n'existe pas

Pour ajouter une contrainte à une colonne Elle doit d'abord exister dans la table il n'y a pas de commande dans Postgresql que vous pouvez utiliser qui ajoutera la colonne et ajoutera la contrainte en même temps. Il doit s'agir de deux commandes distinctes. Vous pouvez le faire en utilisant les commandes suivantes :

Faites d'abord comme :

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

J'utilise integer comme type ici mais il devrait être le même type de id colonne de auth_user tableau.

Ensuite, vous ajoutez la contrainte

ALTER TABLE links_chatpicmessage 
   ADD CONSTRAINT fk_someName
   FOREIGN KEY (sender) 
   REFERENCES auth_user(column_referenced_name);

Le ADD CONSTRAINT fk_someName une partie de cette commande consiste à nommer votre contrainte, donc si vous avez besoin de la documenter avec un outil qui crée votre modèle, vous aurez une contrainte nommée au lieu d'un nom aléatoire.

Cela sert également aux administrateurs afin qu'un administrateur de base de données sache que la contrainte provient de cette table.

Habituellement, nous le nommons avec un indice sur son origine et l'endroit où il fait référence sur votre cas, ce serait fk_links_chatpicmessage_auth_user donc toute personne qui voit ce nom saura exactement quelle est cette contrainte sans faire de requête complexe sur le INFORMATION_SCHEMA pour le savoir.

MODIFIER

Comme mentionné par la réponse de @ btubbs, vous pouvez en fait ajouter une colonne avec une contrainte en une seule commande. Comme ceci :

alter table links_chatpicmessage 
      add column sender integer, 
      add constraint fk_test 
      foreign key (sender) 
      references auth_user (id);