批量导入渠道中途失败,怎样按既定策略保留成功项或整批回滚
批量导入前先决定失败政策:要么任一行失败就整批回滚,要么逐行保存点保留合法项,并输出拒绝清单。两种方式都合理,不能导到一半才临时改变承诺。
先选逐行或整批验收政策
部分接受适合管理员能逐条修复的清单;整批一致适合各行互相依赖的配置变更。界面上显示“导入失败”却留下部分内容,会让重试者不知道哪些已经生效。输入校验和数据库约束也有不同职责:预检查改善提示,提交阶段仍需处理并发造成的唯一冲突。
嵌套SAVEPOINT隔离单行失败
三条假渠道中第二条与第一条同租户同名称,第三条独立合法。逐行SAVEPOINT模式对失败行ROLLBACK TO,再RELEASE,最终留下第一和第三条,拒绝清单含第二行;整批模式直接回滚外层事务,最终为空。附件同时执行两种政策,避免把部分成功误写成数据库偶然行为。
逐行拒绝报告应使用输入原始行号,而不是最终入库表的顺序号;否则去掉失败项以后,管理员会改错行。保存点名称在示例中重复使用,但每次都会释放,不让层级无限累积。整批策略发生错误以后直接停止该轮导入,防止rollback之后又继续写入后面的记录。
生成输入行到结果的对应表
保存点的RELEASE不是脱离外层事务的永久提交。外层稍后失败,前面释放过的行仍会一起回滚。导入报告应记录输入行号、明确原因与最终提交状态;敏感地址和密钥不要写进公开错误日志。本例地址和字段都是假的,也不触发渠道测试。
适用范围:输入全为假渠道地址且无Key,不调用渠道测试;部分接受是显式示例政策。
配套样本与复核入口
- run.py:独立运行程序,包含合成输入、操作和正反例断言。
- case.json:输入说明、预期任务与适用范围,便于保存和交接。
- observed.json:本次实际执行输出;临时路径、进程号和计时可能随运行变化。
程序会把同一组三行分别导入两份临时表,查看partial_rows与atomic_rows便能看到政策差异。拒绝行号为2,和输入原顺序对应。若准备提供给管理员使用,还要设计导入报告如何下载、如何重试被拒行,以及部分成功时界面怎样表述;不能只返回一个总失败码,让用户重复导入已经成功的两行。
Python3.8以上及标准库;使用Python自带SQLite。程序不读取现有网关数据库,全部样本写入内存或新建临时目录,执行完自动清理;没有任何模型API调用。
python -B run.py
阅读输出时,先按case.json中的任务逐项核对网关批量导入SAVEPOINT,再与observed.json比较。非零退出表示依赖或断言需要处理,应保留实际错误。
一手依据1(ROLLBACK TO不结束外层事务;内层RELEASE不能保证最终提交。);一手依据2(SQLite只允许一个同时写事务;BEGIN/COMMIT/ROLLBACK控制合成表事务范围。)。
继续阅读:删过的渠道名想重新使用,怎样只限制仍在用的名称唯一;渠道配置改成功却没留下审计记录,怎样把两次写入放进同一事务;网关切换渠道后如何做小流量验收并保留回退依据。
不想自己搭网关、自己维护渠道?
力达云是托管的 OpenAI / Anthropic 双格式端点,一期提供 DeepSeek,注册送 ¥5 额度。