ホームページ > データベース > mysql チュートリアル > Postgres が外部キーの作成時に「指定されたキーに一致する一意の制約がありません」というエラーをスローするのはなぜですか?

Postgres が外部キーの作成時に「指定されたキーに一致する一意の制約がありません」というエラーをスローするのはなぜですか?

Linda Hamilton
リリース: 2025-01-08 22:19:53
オリジナル
718 人が閲覧しました

Why Does Postgres Throw a

Postgres の参照整合性エラーについて

Postgres (バージョン 9.1 以降) でデータベース構造を構築すると、次のエラーが発生する可能性があります:

<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>
ログイン後にコピー

このエラーは、データベースの一貫性の重要な側面である参照整合性の Postgres の強制によって発生します。 原因と解決策を詳しく見ていきましょう。

参照整合性と外部キー

参照整合性により、関連テーブル間のデータの一貫性が確保されます。 外部キー関係により、テーブル間のリンクが確立されます。 たとえば、テーブル bar にテーブル foo_fkname 列を参照する外部キー foo がある場合、参照整合性により、foo_fk 内のすべての bar 値が既存の name 値に対応する必要があります。 foo.

固有制約の役割

参照整合性を維持するために、Postgres では参照される列 (テーブル namefoo) に一意制約が必要です。 この制約により、name 内の各 foo 値が一意であることが保証され、Postgres が参照される行を明確に識別できるようになります。

エラーの原因: 一意の制約がありません

エラー メッセージは、外部キーによって参照される列の一意制約が欠落していることを示しています。 namefoo 列に一意制約がない場合、Postgres は foo_fkbar 値を foo の特定の行に確実にリンクできず、エラーが発生します。

エラーの解決: 一意制約の追加

解決策は簡単です。参照される列に一意制約を追加します。 SQL では、これは ALTER TABLE および ADD CONSTRAINT コマンドを使用して行われます。

<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_name_unique UNIQUE (name);</code>
ログイン後にコピー

この追加により、name 内の foo 列の一意性が強制され、参照整合性に関する Postgres の要件が満たされ、外部キー関係が正しく機能できるようになります。 制約を追加した後、外部キー関係の作成は成功するはずです。

以上がPostgres が外部キーの作成時に「指定されたキーに一致する一意の制約がありません」というエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート