Postgres の参照整合性エラーについて
Postgres (バージョン 9.1 以降) でデータベース構造を構築すると、次のエラーが発生する可能性があります:
<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>
このエラーは、データベースの一貫性の重要な側面である参照整合性の Postgres の強制によって発生します。 原因と解決策を詳しく見ていきましょう。
参照整合性と外部キー
参照整合性により、関連テーブル間のデータの一貫性が確保されます。 外部キー関係により、テーブル間のリンクが確立されます。 たとえば、テーブル bar
にテーブル foo_fk
の name
列を参照する外部キー foo
がある場合、参照整合性により、foo_fk
内のすべての bar
値が既存の name
値に対応する必要があります。 foo
.
固有制約の役割
参照整合性を維持するために、Postgres では参照される列 (テーブル name
の foo
) に一意制約が必要です。 この制約により、name
内の各 foo
値が一意であることが保証され、Postgres が参照される行を明確に識別できるようになります。
エラーの原因: 一意の制約がありません
エラー メッセージは、外部キーによって参照される列の一意制約が欠落していることを示しています。 name
の foo
列に一意制約がない場合、Postgres は foo_fk
の bar
値を 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 サイトの他の関連記事を参照してください。