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

L'aggiunta di una colonna come chiave esterna fornisce la colonna ERROR a cui si fa riferimento nel vincolo di chiave esterna non esiste

Per aggiungere un vincolo a una colonna Deve esistere prima nella tabella non c'è alcun comando in Postgresql che puoi usare che aggiungerà la colonna e aggiungerà il vincolo allo stesso tempo. Devono essere due comandi separati. Puoi farlo usando i seguenti comandi:

Per prima cosa fai come:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Uso integer come digitare qui ma dovrebbe essere lo stesso tipo di id colonna del auth_user tabella.

Quindi aggiungi il vincolo

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

Il ADD CONSTRAINT fk_someName parte di questo comando è la denominazione il tuo vincolo, quindi se hai bisogno di documentarlo con uno strumento che crei il tuo modello avrai un vincolo denominato invece di un nome casuale.

Inoltre serve agli scopi degli amministratori in modo che un DBA sappia che il vincolo proviene da quella tabella.

Di solito lo chiamiamo con qualche suggerimento su da dove viene a dove fa riferimento nel tuo caso sarebbe fk_links_chatpicmessage_auth_user quindi chiunque veda questo nome saprà esattamente qual è questo vincolo senza fare query complesse su INFORMATION_SCHEMA per scoprirlo.

MODIFICA

Come accennato dalla risposta di @btubbs, puoi effettivamente aggiungere una colonna con un vincolo in un comando. Così:

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