sql >> Databasteknik >  >> RDS >> PostgreSQL

Att lägga till en kolumn som en främmande nyckel ger ERROR kolumn som refereras i främmande nyckel begränsning existerar inte

För att lägga till en begränsning till en kolumn Den måste finnas först i tabellen det finns inget kommando i Postgresql som du kan använda som lägger till kolumnen och lägger till begränsningen samtidigt. Det måste vara två separata kommandon. Du kan göra det med följande kommandon:

Gör först som:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Jag använder integer som typ här men det bör vara samma typ av id kolumnen i auth_user bord.

Sedan lägger du till begränsningen

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

ADD CONSTRAINT fk_someName en del av detta kommando är namngivning din begränsning så om du senare behöver dokumentera den med något verktyg som skapar din modell kommer du att ha en namngiven begränsning istället för ett slumpmässigt namn.

Det tjänar också administratörsändamål så att en DBA vet att begränsningen kommer från den tabellen.

Vanligtvis namnger vi den med en antydan om var den kom ifrån till var den hänvisar till i ditt fall, den skulle vara fk_links_chatpicmessage_auth_user så alla som ser detta namn kommer att veta exakt vad denna begränsning är utan att göra en komplicerad fråga på INFORMATION_SCHEMA för att ta reda på det.

REDIGERA

Som nämnts av @btubbs svar kan du faktiskt lägga till en kolumn med en begränsning i ett kommando. Som så:

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


  1. Ser fram emot PGConf India 2017

  2. Kontrollera om tabellen finns i SQL Server

  3. Infoga en bild i postgresql-databasen

  4. NEW_TIME() Funktion i Oracle