web-dev-qa-db-ja.com

postgresキーがテーブル制約に存在しません

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を検索しようとしている理由がわかりません。

何か案は?

9
Adam Sims

エラーメッセージは、テーブル_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)テーブルには存在しないです。

0
functioncall