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

PostgreSQL input bulk data While Skipping Relation Error

我正在使用 PG_Admin 工具对 PostgreSQL 进行批量插入,table 字段 anamnesa_id 包含与其他 table pasien_anamnesa,

有没有办法在插入所有查询时忽略或跳过(其他 table 中不存在的错误)错误?因为对于这么多数据(25.000 条记录),

来说,逐一删除错误查询是不可能的

我在努力:

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

从那个错误我也试过:

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:  constraint in ON CONFLICT clause has no associated index
SQL state: 42809

ON CONFLICT只能处理唯一约束,不能处理外键或检查约束。

您需要重写查询以使用仅 returns 存在外键的行的 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;

Online example