PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Das Hinzufügen einer Spalte als Fremdschlüssel ergibt eine ERROR-Spalte, auf die in der Fremdschlüsseleinschränkung verwiesen wird, existiert nicht

So fügen Sie einer Spalte eine Einschränkung hinzu Es muss zuerst in der Tabelle vorhanden sein Es gibt keinen Befehl in Postgresql, den Sie verwenden können, um die Spalte und gleichzeitig die Einschränkung hinzuzufügen. Es müssen zwei separate Befehle sein. Sie können dies mit den folgenden Befehlen tun:

Gehen Sie zuerst wie folgt vor:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Ich verwende integer als Typ hier, aber es sollte derselbe Typ wie id sein Spalte des auth_user Tabelle.

Dann fügen Sie die Einschränkung hinzu

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

Der ADD CONSTRAINT fk_someName Teil dieses Befehls ist die Benennung Ihre Einschränkung, wenn Sie sie also später mit einem Werkzeug dokumentieren müssen, das Ihr Modell erstellt, haben Sie eine benannte Einschränkung anstelle eines zufälligen Namens.

Es dient auch Administratorzwecken, damit ein DBA weiß, dass die Einschränkung aus dieser Tabelle stammt.

Normalerweise benennen wir es mit einem Hinweis darauf, woher es kommt, worauf es verweist. In Ihrem Fall wäre es fk_links_chatpicmessage_auth_user Jeder, der diesen Namen sieht, wird also genau wissen, was diese Einschränkung ist, ohne eine komplexe Abfrage des INFORMATION_SCHEMAs durchführen zu müssen, um dies herauszufinden.

BEARBEITEN

Wie in der Antwort von @btubbs erwähnt, können Sie tatsächlich eine Spalte mit einer Einschränkung in einem Befehl hinzufügen. So:

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