以下のテーブル構造はエラーを示しています:参照されたテーブルに与えられたキーと一致する一意の制約はなく、この状況でこのエラーがなぜ発生するのか理解できません。上記のコードを実行するERRORの原因:参照されたテーブルに与えられたキーに一致する一意の制約はありませんか?
BEGIN;
CREATE TABLE foo (
name VARCHAR(256) PRIMARY KEY
);
CREATE TABLE bar(
pkey SERIAL PRIMARY KEY,
foo_fk VARCHAR(256) NOT NULL REFERENCES foo(name),
name VARCHAR(256) NOT NULL,
UNIQUE (foo_fk,name)
);
CREATE TABLE baz(
pkey SERIAL PRIMARY KEY,
bar_fk VARCHAR(256) NOT NULL REFERENCES bar(name),
name VARCHAR(256)
);
COMMIT;
は私には意味がありません。次のエラーを与える、このエラーが発生する理由を誰もが説明できます。私はあなたのbar
テーブルにあなたがunique (name)
インデックスを持っている必要がありますので、すべての外部キーは、親テーブルのユニークキーを参照する必要がありますpostgresの9.1
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "foo_pkey" for table "foo"
NOTICE: CREATE TABLE will create implicit sequence "bar_pkey_seq" for serial column "bar.pkey"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "bar_pkey" for table "bar"
NOTICE: CREATE TABLE/UNIQUE will create implicit index "bar_foo_fk_name_key" for table "bar"
NOTICE: CREATE TABLE will create implicit sequence "baz_pkey_seq" for serial column "baz.pkey"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "baz_pkey" for table "baz"
ERROR: there is no unique constraint matching given keys for referenced table "bar"
********** Error **********
ERROR: there is no unique constraint matching given keys for referenced table "bar"
SQL state: 42830
なぜ宣言されたPKは一意の制約と見なされませんか?非ユニークなPKを持つことはできません。 – amphibient
データベースエンジンは、実際に参照している行を知る方法がないため、「指す」テーブル上で一意でなければなりません。 –