[解決済み] 外部キーとしてカラムを追加すると、外部キー制約で参照されるカラムが存在しないERRORが表示される
質問
以下のような設定をしています。
CREATE TABLE auth_user ( id int PRIMARY KEY );
CREATE TABLE links_chatpicmessage ();
私が試みているのは
カラムを追加する
という名前の
sender
を
links_chatpicmessage
という別のテーブルへの外部キーである
auth_user
's
id
カラムになります。
上記を実現するために、ターミナルで以下を試しています。
ALTER TABLE links_chatpicmessage
ADD FOREIGN KEY (sender)
REFERENCES auth_user;
しかし、これではエラーになります。
ERROR: 外部キー制約で参照される列 "sender" が存在しません。 存在しません。
これを修正するにはどうすればよいですか?
どのように解決するのですか?
カラムに制約を追加するには、まずテーブルの中に を追加すると同時に制約を追加するようなコマンドは、Postgresql にはありません。それは2つの別々のコマンドでなければなりません。 以下のコマンドを使用することができます。
まず、asを実行します。
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で複雑なクエリを実行しなくても、この制約が何であるかを正確に知ることができます。
EDIT
btubbsの回答で言及されているように、実際には1つのコマンドで制約を持つ列を追加することができます。このように。
alter table links_chatpicmessage
add column sender integer,
add constraint fk_test
foreign key (sender)
references auth_user (id);
関連
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] FOREIGN KEY制約で参照されているため、テーブルを切り捨てることができないのですか?
-
[解決済み] 外部キー制約のあるテーブルを切り捨てるには?
-
[解決済み] FOREIGN KEY制約を導入すると、サイクルや複数のカスケード・パスが発生する可能性があります - なぜですか?
-
[解決済み】PostgreSQLのエラーです。Fatal: ロール "username" が存在しません。
-
[解決済み】既存テーブルへの外部キー追加
-
[解決済み】マイグレーション。外部キー制約を追加できない
-
[解決済み】MySQLで外部キー制約を追加できない
-
[解決済み] SQLite UPSERT / UPDATE OR INSERT
-
[解決済み] なぜ、いつ、Liquibaseなのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 外部キーを主キーにするのは問題ないですか?
-
[解決済み] マスター・マスターとマスター・スレーブ、どちらのデータベース・アーキテクチャが良いのか?
-
[解決済み] データベースの設計に外部キーは本当に必要なのか?
-
[解決済み] 変更履歴/監査データベーステーブルの最適なデザインは?[クローズド]
-
[解決済み] データベースのインデックスはいくつあっても足りない?
-
[解決済み] データベースに郵便番号を格納する必要があります。カラムの大きさはどのくらいにすればよいでしょうか?
-
[解決済み] Postgresql - データベースをバックアップし、異なる所有者にリストア?
-
[解決済み] 1対1の関係はどのようなときに使うべきですか?
-
[解決済み] なぜ、いつ、Liquibaseなのか?
-
[解決済み] データベースに登録する電子メールアドレスの最適な長さは?