列に制約を追加するには最初にテーブルに存在する必要がありますPostgresqlには、列の追加と制約の追加を同時に行うために使用できるコマンドはありません。 2つの別々のコマンドである必要があります。 次のコマンドを使用して実行できます:
最初に行うこと:
ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;
integer
を使用しています ここに入力しますが、id
と同じタイプである必要があります auth_user
の列 テーブル。
次に、制約を追加します
ALTER TABLE links_chatpicmessage
ADD CONSTRAINT fk_someName
FOREIGN KEY (sender)
REFERENCES auth_user(column_referenced_name);
ADD CONSTRAINT fk_someName
このコマンドの一部は名前付けです 制約があるため、後でモデルを作成するツールを使用して文書化する必要がある場合は、ランダムな名前ではなく名前付きの制約があります。
また、管理者の目的にも役立つため、DBAは制約がそのテーブルからのものであることを認識します。
通常、それがどこから来たのか、あなたのケースで参照している場所についてのヒントを付けて名前を付けます。fk_links_chatpicmessage_auth_user
したがって、この名前を見た人は誰でも、INFORMATION_SCHEMAで複雑なクエリを実行しなくても、この制約が何であるかを正確に知ることができます。
編集
@btubbsの回答で述べたように、実際には1つのコマンドで制約付きの列を追加できます。そのように:
alter table links_chatpicmessage
add column sender integer,
add constraint fk_test
foreign key (sender)
references auth_user (id);