postgresql - Postgres Insert as select from table 忽略任何错误
问题描述
我正在尝试使用 insert as select stmt 将临时表中的记录批量加载到表中,并在冲突策略上进行更新。
我想加载尽可能多的记录,目前如果有任何外键违规没有插入记录,一切都会回滚。有没有办法插入有效记录并跳过错误记录。
在https://dba.stackexchange.com/a/46477中,我看到了在查询中使用外部表以忽略错误行的策略。我也不想这样做,因为该表上可能有很多外键,这会使我的查询更加复杂和特定于表。我希望它是通用的。
示例用例,如果临时表中有 100 行并且假设行号 5 和 7 导致插入失败,我想插入其余 98 条记录并确定哪两行失败。我想避免逐条插入记录并捕获错误,因为它效率不高。我正在做这整个练习以避免逐行加载表格。
Oracle 提供了一次捕获批量错误的支持。
示例https://stackoverflow.com/a/36430893/8575780
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1422998100346727312
我已经探索了使用复制加载的选项,它不会捕获空约束和其他数据类型错误,但是当发生外键违规时,什么都不会被提交。
我正在寻找更接近 pgloader 在面临错误时所做的事情。 https://pgloader.readthedocs.io/en/latest/pgloader.html#batches-and-retry-behaviour
解决方案
推荐阅读
- c++ - 如何使用特定数字拆分字符串?
- python - Google gmail API:base64 需要字节,但 URL 正文需要 str
- python - PHP中的十六进制编解码器/ base64编码(从python转换)
- python - 从 Python zipfile 读取线程安全吗?
- python-3.x - 寻找两种模式之间的准确性
- python-3.x - 如何在 python 3.x 中使用袖扣绘制 r =(20 天移动平均线/20 周移动平均线)图?
- r - 清理 X 和 Y 轴
- c++ - 二分查找的实现
- c - 尝试连接节点时出现分段错误
- multithreading - 有没有办法监控resilience4j线程池?