スポンサーリンク

ERROR: there is no unique constraint matching gi iven keys for referenced table

スポンサーリンク

題名のErrorが出た場合

原因

参照しているカラムが一意ではない、あるいは、NULLを許容するためです。

1つしかPrimary Keyが設定されていない場合に、PrimaryKeyを参照する場合、自動で一意かつNON-NULLになるので、気にする必要はありません。ただし、2組以上のPrimary Keyを参照する場合、あるいは、非キー属性を参照する場合には注意が必要です。以下のような場合です.

解決策

参照していカラム(属性)にNON NULL かつ UNIQUEな制約を与えます。例えば以下のように設定します。data_nameに対してForeign Keyを設定する場合、UNIQUE KEYとPRIMARY KEYを設定します。PRIMARY KEYは組で設定する場合、一方がUNIQUEでなくとも問題ないので、明示的に指定する必要があります。

CREATE TABLE some_data(
       id serial UNIQUE,
       data_name VARCHAR(10) UNIQUE,
       flag bool,
       data_type myDataType,
       PRIMARY KEY (id, data_name)
);

CREATE TABLE partData(
    id serial,
    data_name VARCHAR(10) NOT NULL REFERENCES some_data(data_name),
    contents VARCHAR
);
タイトルとURLをコピーしました