Postgres 9.5でALTER TABLEを実行して外部キー制約を作成しようとした場合:product_template.product_brand_id
からproduct_brand.id
へ
ALTER TABLE public.product_template
ADD CONSTRAINT product_template_product_brand_id_fkey
FOREIGN KEY (product_brand_id)
REFERENCES public.product_brand (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE SET NULL;
エラーを返します
ERROR: insert or update on table "product_template" violates foreign key constraint "product_template_product_brand_id_fkey"
DETAIL: Key (product_brand_id)=(12) is not present in table "product_brand".
STATEMENT: ALTER TABLE "product_template" ADD FOREIGN KEY ("product_brand_id") REFERENCES "product_brand" ON DELETE set null
Fkeyがproduct_brand.product_brand_id
からproduct_template.product_brand_id
であるときに、postgresがproduct_brand.id
を検索しようとしている理由がわかりません。
何か案は?
エラーメッセージは、テーブル_product_template
_の少なくとも1つの行が列_12
_に値_product_brand_id
_を含むことを単に示しています。
しかし、テーブル_product_brand
_には対応する行がありません。ここで、列id
には値_12
_が含まれています
Key (product_brand_id)=(12)
は、ターゲット列ではなく、外部キーのsource列に関連しています。
簡単に言うと、ALTERステートメントで提供されるFOREIGN KEYの値(product_brand_id)はソース(product_brand)テーブルには存在しないです。