1. ホーム
  2. sql

[解決済み] Postgresで既存のテーブルに制約を追加しようとすると、なぜSQL state:23503が表示されるのですか?

2022-02-10 02:45:20

質問

テーブル Advisor であり、特殊な User のみを含んでおり iduser_id を(今のところ!)作ろうとしています。 user_id を外部キーにするスクリプトです。

ALTER TABLE advisor
ADD CONSTRAINT advisor_user_id_fkey
FOREIGN KEY (user_id) REFERENCES "user" (id);

うまくいくはずなのですが、次のようなエラーが発生します。

ERROR: insert or update on table "advisor" violates foreign key constraint "advisor_user_id_fkey"
SQL state: 23503
Detail: Key (user_id)=(44) is not present in table "user".

を参照するべきだと言っているのですから、これはおかしいと思います。 user.id であって user.user_id しかし、明らかに私のやり方が間違っているようです。 どなたかお分かりになる方はいらっしゃいますか?ありがとうございます。

を更新しました。 なぜ user ではなく "user" なのかというと、pgAdmin は user を好まないからです。

解決方法は?

エラーメッセージには、次のように書かれています。 あなたの "advisor" テーブルに、あなたの "user" テーブルに存在しないエントリ (44) があります。

あなたの外部キーは "advisor" で定義され、"user" テーブルが親テーブルであることを定めています。おそらく、その外部キーが逆に定義されているのではありませんか?

この問題については、"user" が予約語であるため、pgadmin はこの単語でトラブルを起こしています。もし、変更できるのであれば、変更することをお勧めします。予約語については、以下を参照してください。 http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html .