我正在尝试使用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
我已经探索了使用copy加载选项,它捕获了非空约束和其他数据类型错误,但是当发生外键违规时,没有任何内容被提交。
我正在寻找更接近pgloader在遇到错误时所做的事情。 https://pgloader.readthedocs.io/en/latest/pgloader.html#batches-and-retry-behaviour