PostgreSQL エラーのデコード: 「参照テーブル 'bar' に一意の制約がありません」
PostgreSQL 9.1 ユーザーは、相互接続されたテーブルを構築するときに、「参照テーブル "bar" に指定されたキーに一致する一意の制約がありません。」という、この厄介なエラーに遭遇することがよくあります。このガイドでは、根本的な原因と解決策について説明します。
このエラーは通常、テーブル (foo
、bar
、baz
など) が外部キーを介してリンクされている場合に発生します。 たとえば、bar
は外部キー (foo
) を使用して foo_fk
を参照し、baz
は別の外部キー (bar
) を使用して bar_fk
を参照する場合があります。
テーブル内にあります。 一意のインデックスは結合された列 (bar
と foo_fk
など) に存在する可能性がありますが、name
列自体には一意の制約がありません。name
内の 2 つの行が同じ bar
値 (例: 'ams') を共有します。 name
の 'ams' を参照する行を baz
に挿入しようとすると、あいまいさが生じます。 PostgreSQL は正しい bar_fk
行を判断できないため、エラーが発生します。bar
解決策: 一意性を強制する
修正は簡単です。 テーブルの name
列に一意制約を追加します。 次の SQL コマンドを使用します:bar
<code class="language-sql">ALTER TABLE bar ADD UNIQUE (name);</code>
行が確実に一意の bar
を持つようになり、曖昧さが解決され、外部キー関係が成功するようになります。 これで、テーブル構造が意図したとおりに機能するようになります。name
以上がPostgreSQL が「参照テーブル 'bar' に一意の制約がありません」をスローするのはなぜですか? それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。