PostgreSQL在跳过关系错误时输入批量数据

PostgreSQL在跳过关系错误时输入批量数据,postgresql,foreign-keys,sql-insert,Postgresql,Foreign Keys,Sql Insert,我正在使用PG_管理工具对PostgreSQL进行大容量插入,表字段anamnesa_id包含与其他表pasien_anamnesa的ForeignKey关系 插入所有查询时,是否有方法忽略或跳过其他表中不存在的错误?因为对于这么多的数据25000条记录,逐个删除错误查询是不可能的 我一直在努力: INSERT INTO "pasien_item" ("id", "anamnesa_id") VALUES (1, 2) ON CONFL

我正在使用PG_管理工具对PostgreSQL进行大容量插入,表字段anamnesa_id包含与其他表pasien_anamnesa的ForeignKey关系

插入所有查询时,是否有方法忽略或跳过其他表中不存在的错误?因为对于这么多的数据25000条记录,逐个删除错误查询是不可能的

我一直在努力:

INSERT INTO "pasien_item" ("id", "anamnesa_id") VALUES (1, 2) ON CONFLICT ON CONSTRAINT pasien_item_pkey DO NOTHING;
产生的错误:

ERROR:  insert or update on table "pasien_item" violates foreign key constraint "pasien_item_anamnesa_id_dc66b31b_fk_pasien_anamnesa_id"
DETAIL:  Key (anamnesa_id)=(2) is not present in table "pasien_anamnesa".
SQL state: 23503
ERROR:  constraint in ON CONFLICT clause has no associated index
SQL state: 42809
从这个错误中,我还尝试:

INSERT INTO "pasien_item" ("id", "anamnesa_id") VALUES (1, 2) ON CONFLICT ON CONSTRAINT pasien_item_anamnesa_id_dc66b31b_fk_pasien_anamnesa_id DO NOTHING;
产生的错误:

ERROR:  insert or update on table "pasien_item" violates foreign key constraint "pasien_item_anamnesa_id_dc66b31b_fk_pasien_anamnesa_id"
DETAIL:  Key (anamnesa_id)=(2) is not present in table "pasien_anamnesa".
SQL state: 23503
ERROR:  constraint in ON CONFLICT clause has no associated index
SQL state: 42809
关于冲突只能处理唯一约束,而不能处理外键或检查约束

您需要重写查询以使用仅返回外键所在行的SELECT:

INSERT INTO pasien_item(id, anamnesa_id) 
select v.id, v.anamnesa_id
from (
   VALUES (1, 2), ...
) v(id, anamnesa_id) 
WHERE EXISTS (select *
              from pasien_anamnesa pa
              where pa.anamnesa_id = v.anamnesa_id)
ON CONFLICT ON CONSTRAINT pasien_item_pkey DO NOTHING;

错误:v行2处或附近出现语法错误:.1,2 vid,anam…^SQL状态:42601字符:315显然,您需要替换。。。与您拥有的其他行分开是的,我已经这样做了:插入pasien_项目id,anamnesa_id,DIAGNOSA从值3841011732中选择v.id,v.anamnesa_id,v.DIAGNOSA,‘OK’vid,anamnesa_id,DIAGNOSA,如果不存在,则选择*从pasien_anamnesa pa中选择pa.anamnesa_id=v.anamnesa_id关于约束pasien_项目的冲突,不做任何事情;它本来应该存在,但语法是有效的:啊,我错过了一个结束括号,现在它起作用了!谢谢你,伙计!