sql >> Base de Datos >  >> RDS >> PostgreSQL

Agregar una columna como clave externa da como resultado que la columna de ERROR a la que se hace referencia en la restricción de clave externa no existe

Para agregar una restricción a una columna, primero debe existir en la tabla no hay un comando en Postgresql que pueda usar que agregue la columna y agregue la restricción al mismo tiempo. Deben ser dos comandos separados. Puedes hacerlo usando los siguientes comandos:

Primero haz como:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Yo uso integer como escriba aquí, pero debe ser del mismo tipo que el id columna del auth_user mesa.

Luego agregas la restricción

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

ADD CONSTRAINT fk_someName parte de este comando es nombrar su restricción, por lo que si necesita documentarlo más tarde con alguna herramienta que cree su modelo, tendrá una restricción con nombre en lugar de un nombre aleatorio.

También sirve a los propósitos de los administradores para que un DBA sepa que la restricción proviene de esa tabla.

Por lo general, lo nombramos con alguna pista sobre de dónde vino a dónde hace referencia en su caso, sería fk_links_chatpicmessage_auth_user por lo que cualquiera que vea este nombre sabrá exactamente cuál es esta restricción sin hacer una consulta compleja en INFORMACION_ESQUEMA para averiguarlo.

EDITAR

Como se menciona en la respuesta de @btubbs, en realidad puede agregar una columna con una restricción en un comando. Así:

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