PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dodanie kolumny jako klucza obcego powoduje, że kolumna ERROR, do której odwołuje się ograniczenie klucza obcego, nie istnieje

Aby dodać ograniczenie do kolumny Musi istnieć najpierw w tabeli w Postgresql nie ma polecenia, którego można użyć, aby dodać kolumnę i jednocześnie ograniczenie. Muszą to być dwa oddzielne polecenia. Możesz to zrobić za pomocą następujących poleceń:

Najpierw wykonaj jako:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Używam integer jako typ tutaj, ale powinien to być ten sam typ co id kolumna auth_user tabela.

Następnie dodajesz ograniczenie

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

ADD CONSTRAINT fk_someName częścią tego polecenia jest nazywanie Twoje ograniczenie, więc jeśli później będziesz musiał je udokumentować za pomocą jakiegoś narzędzia, które utworzy Twój model, będziesz miał nazwane ograniczenie zamiast losowej nazwy.

Służy również do celów administratorów, aby administrator wiedział, że ograniczenie pochodzi z tej tabeli.

Zwykle nazywamy go z pewną wskazówką, skąd pochodzi, do którego odnosi się w twoim przypadku, będzie to fk_links_chatpicmessage_auth_user więc każdy, kto zobaczy tę nazwę, będzie wiedział dokładnie, co to za ograniczenie, bez wykonywania złożonego zapytania w INFORMATION_SCHEMA, aby się dowiedzieć.

EDYTUJ

Jak wspomniano w odpowiedzi @btubbs, możesz faktycznie dodać kolumnę z ograniczeniem w jednym poleceniu. Tak:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Systemy plików Linux i testy punktów kontrolnych PostgreSQL

  2. Najważniejsze zagrożenia bezpieczeństwa PostgreSQL

  3. Tabela ze współrzędnymi siatki heksagonalnej, która obejmuje świat

  4. Rails i PostgreSQL:rola postgres nie istnieje

  5. Pula połączeń PostgreSQL:część 2 – PgBouncer