web-dev-qa-db-fra.com

la clé postgres n'est pas présente dans la contrainte de table

Lorsque vous essayez de MODIFIER TABLE dans Postgres 9.5 pour créer une contrainte de clé étrangère: from 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;

Retourne une erreur

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

Je ne comprends pas pourquoi postgres essaie de trouver product_brand.product_brand_id, lorsque la touche f provient de product_template.product_brand_id à product_brand.id

Des idées?

9
Adam Sims

Le message d'erreur indique simplement qu'il existe au moins une ligne dans la table product_template Qui contient la valeur 12 Dans la colonne product_brand_id

Mais il n'y a pas de ligne correspondante dans le tableau product_brand Où la colonne id contient la valeur 12

Key (product_brand_id)=(12) relie la colonne source de la clé étrangère, pas la colonne cible.

4

En termes simples, la valeur de FOREIGN KEY (product_brand_id) fournie dans votre instruction ALTER est non présente dans la table source (product_brand).

0
functioncall