sql >> Database teknologi >  >> RDS >> PostgreSQL

Tilføjelse af en kolonne som en fremmednøgle giver ERROR kolonne, der henvises til i fremmed nøgle begrænsning eksisterer ikke

For at tilføje en begrænsning til en kolonne Den skal eksistere først i tabellen der er ingen kommando i Postgresql, som du kan bruge, som tilføjer kolonnen og tilføjer begrænsningen på samme tid. Det skal være to separate kommandoer. Du kan gøre det ved at bruge følgende kommandoer:

Gør først som:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Jeg bruger integer som type her, men det skal være den samme type id kolonne i auth_user tabel.

Så tilføjer du 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 af denne kommando er navngivning din begrænsning, så hvis du senere har brug for at dokumentere det med et eller andet værktøj, der skaber din model, vil du have en navngivet begrænsning i stedet for et tilfældigt navn.

Det tjener også administratorens formål, så en DBA ved, at begrænsningen er fra den tabel.

Normalt navngiver vi det med et tip om, hvor det kom fra, til hvor det refererer til din sag, det ville være fk_links_chatpicmessage_auth_user så enhver, der ser dette navn, ved nøjagtigt, hvad denne begrænsning er uden at foretage en kompleks forespørgsel på INFORMATION_SCHEMA for at finde ud af det.

REDIGER

Som nævnt af @btubbs' svar kan du faktisk tilføje en kolonne med en begrænsning i en kommando. Sådan:

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


  1. Dynamisk SQL (oversætter tabelnavn som parameter)

  2. Tilføj en kolonne med en standardværdi til en eksisterende tabel i SQL Server

  3. En Event Management Data Model

  4. SQL Server-fejl 213:Kolonnenavnet eller antallet af angivne værdier matcher ikke tabeldefinitionen.