sql >> Databáze >  >> RDS >> PostgreSQL

Přidání sloupce jako cizího klíče způsobí, že sloupec ERROR odkazovaný v omezení cizího klíče neexistuje

Chcete-li přidat omezení do sloupce Musí nejprve existovat v tabulce v Postgresql není žádný příkaz, který byste mohli použít, který přidá sloupec a zároveň přidá omezení. Musí to být dva samostatné příkazy. Můžete to udělat pomocí následujících příkazů:

Nejprve postupujte takto:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;

Používám integer jako typ zde, ale měl by to být stejný typ id sloupec auth_user tabulka.

Poté přidáte omezení

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

ADD CONSTRAINT fk_someName součástí tohoto příkazu je pojmenování vaše omezení, takže pokud jej budete potřebovat zdokumentovat pomocí nějakého nástroje, který vytvoří váš model, budete mít místo náhodného názvu pojmenované omezení.

Slouží také pro účely administrátorů, aby DBA věděl, že omezení pochází z této tabulky.

Obvykle jej pojmenujeme s nějakou nápovědou o tom, odkud pochází, kam odkazuje na váš případ, bylo by to fk_links_chatpicmessage_auth_user takže každý, kdo uvidí tento název, bude přesně vědět, co je toto omezení, aniž by to zjistil složitým dotazem na INFORMAČNÍ SCHÉMA.

UPRAVIT

Jak je uvedeno v odpovědi @btubbs, můžete skutečně přidat sloupec s omezením v jednom příkazu. Asi takhle:

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


  1. Chyby T-SQL, úskalí a osvědčené postupy – funkce oken

  2. Nelze vložit explicitní hodnotu pro sloupec identity v tabulce 'tabulka', když je IDENTITY_INSERT nastaveno na OFF

  3. Vývoj PostgreSQL pro Windows, část 1

  4. "VAROVÁNÍ:Byla zjištěna neshoda mezi sl_table a pg_class." v Slony-I