PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Adicionar uma coluna como uma chave estrangeira fornece a coluna ERROR referenciada na restrição de chave estrangeira não existe


Para adicionar uma restrição a uma coluna Ela precisa existir primeiro na tabela não existe nenhum comando no Postgresql que você possa usar que irá adicionar a coluna e adicionar a restrição ao mesmo tempo. Deve ser dois comandos separados. Você pode fazer isso usando os seguintes comandos:

Primeiro faça como:
ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Eu uso integer como tipo aqui, mas deve ser do mesmo tipo do id coluna do auth_user tabela.

Então você adiciona a restrição
ALTER TABLE links_chatpicmessage 
   ADD CONSTRAINT fk_someName
   FOREIGN KEY (sender) 
   REFERENCES auth_user(column_referenced_name);

O ADD CONSTRAINT fk_someName parte deste comando é nomear sua restrição, portanto, se você precisar documentá-la com alguma ferramenta que crie seu modelo, você terá uma restrição nomeada em vez de um nome aleatório.

Também serve para propósitos de administradores para que um DBA saiba que a restrição é dessa tabela.

Normalmente, nós o nomeamos com alguma dica sobre de onde veio para onde ele faz referência no seu caso, seria fk_links_chatpicmessage_auth_user então qualquer um que veja esse nome saberá exatamente qual é essa restrição sem fazer uma consulta complexa no INFORMATION_SCHEMA para descobrir.

EDITAR

Conforme mencionado pela resposta do @btubbs, você pode adicionar uma coluna com uma restrição em um comando. Igual a:
alter table links_chatpicmessage 
      add column sender integer, 
      add constraint fk_test 
      foreign key (sender) 
      references auth_user (id);