我正在执行一个非常简单的操作,即从处理它的一个表中获取值并将其加载到Postgres中的空表中。
第一个表具有以下结构:
CREATE TABLE public.entities
(
canonical character varying(255) NOT NULL DEFAULT ''::character varying,
db_id character varying(255) NOT NULL,
code character varying(255),
description character varying(4096),
level character varying(255),
class character varying(255) NOT NULL,
model character varying(255) NOT NULL DEFAULT 'test'::character varying,
variants text[],
CONSTRAINT entities_pkey PRIMARY KEY (db_id, canonical, class, model)
)
我尝试加载已处理数据的第二张表具有以下结构
CREATE TABLE public.entities_variants
(
entitymodel_canonical character varying(255) NOT NULL,
entitymodel_db_id character varying(255) NOT NULL,
entitymodel_model character varying(255) NOT NULL,
entitymodel_class character varying(255) NOT NULL,
variants character varying(255),
CONSTRAINT fk8g9miq5xcx1jtp85lysrkjhm FOREIGN KEY (entitymodel_canonical, entitymodel_db_id, entitymodel_model, entitymodel_class)
REFERENCES public.entities (db_id, canonical, class, model) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
现在,当我尝试插入(逐行或整个数据帧)时,出现完整性错误:
IntegrityError:对表“ entities_variants”的插入或更新违反 外键约束“ fk8g9miq5xcx1jtp85lysrkjhm”详细信息:键 (entitymodel_canonical,entitymodel_db_id,entitymodel_model, entitymodel_class)=(提莫西礼服,92002,ofirmev,名称)不是 存在于“实体”表中。
我已确认该数据按原样存在于第一张表中。
答案 0 :(得分:1)
您定义外键的列顺序与引用列的顺序不匹配。
您有entitymodel_canonical
引用了db_id
,entitymodel_db_id
引用了canonical
,等等。
我认为您的约束条件应为:
CONSTRAINT fk8g9miq5xcx1jtp85lysrkjhm FOREIGN KEY (entitymodel_db_id ,entitymodel_canonical, entitymodel_class, entitymodel_model)
REFERENCES public.entities (db_id, canonical, class, model) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION