更新时间:2025-09-04 GMT+08:00
数据存在错误时的导入操作指南
数据导入过程中的容错处理机制提供两种可选模式。
智能修正模式(自适应入库)
严格校验模式(精准入库)
- 处理原则:以数据准确性优先,确保入库数据的规范性要求。
- 适用场景:在医疗记录、金融交易等对数据精度要求极高的领域,若担心智能修正模式在导入数据时自动修正会影响数据准确性,可采用此模式。
- 处理流程:
- 执行多级校验(列数异常、字符异常、数据类型转换异常及约束冲突异常)。
- 生成错误诊断报告(含行号、错误类型、错误数据)。
- 建立错误数据隔离区。
- 仅通过校验的原始数据直接入库。
- 输出结果:纯净数据集以及错误明细报告(通过gs_copy_error_log与gs_copy_summary查看)。
- 容错级别:
- Level1容错:适用于智能修正模式处理的所有异常,如数据源列数过多、数据类型转换错误、字段超长、转码异常等。具体使用方法如下:
1 2 3 4
--当导入数据过程中出现数据类型错误的次数不超过100次时,导入不会报错,会继续导入下一行。若超过100次,则正常报错。错误数据的详情及行号会记录在gs_copy_error_log表中。 gaussdb=# copy test_copy from '/home/omm/temp/test.csv' log errors reject limit '100' csv; --相较于上条语句,下面这条会在gs_copy_error_log中额外记录错误行的完整数据,在无数据安全风险的场景下推荐使用。该语句需要系统管理员权限。 gaussdb=# copy test_copy from '/home/omm/temp/test.csv' log errors data reject limit '100' csv;
- Level2容错:在Level1基础上,还支持处理数据中的约束冲突错误,包括非空约束、条件约束、主键约束、唯一性约束和唯一性索引等问题。具体使用方法如下:
1 2 3
--设置如下GUC后,采用与Level1容错相同的COPY语句,容错逻辑也与Level1一致,只是额外支持约束冲突类型的错误。 gaussdb=# SET a_format_load_with_constraints_violation = 's2'; gaussdb=# copy test_copy from '/home/omm/temp/test.csv' log errors data reject limit '100' csv;
- Level1容错:适用于智能修正模式处理的所有异常,如数据源列数过多、数据类型转换错误、字段超长、转码异常等。具体使用方法如下:
总结
智能修正模式与严格校验模式可以结合使用,且智能修正模式具有优先级。在进行COPY导入时,若已明确指定对数据异常采用智能修正,那么该行数据的处理将不会触发严格校验模式。这意味着错误表不会记录相应数据,同时也不会扣除reject limit次数。建议用户根据自身实际情况,权衡是否自动修正列异常与字符异常后入库,还是直接舍弃。
对于严格校验模式的两个级别,推荐用户默认选择Level1。这是因为Level1所支持的错误类型较为常见,并且不会对导入性能产生任何影响。而Level2目前仅在集中式A兼容环境下支持,开启该特性会额外消耗导入性能和内存资源。因此,不建议用户默认使用Level2,仅在明确数据存在约束类型冲突时再开启。

- 此容错选项默认不支持对约束冲突进行容错。如需要对约束冲突进行容错,可额外设置会话级GUC参数a_format_load_with_constraints_violation为"s2"后再次导入即可。
- 支持的约束冲突类型包括:非空约束、条件约束、主键约束、唯一性约束以及唯一性索引。
- 该功能仅在集中式的A兼容模式下有效。
- 导入数据的表存在语句级触发器时,该触发器遇到上述约束冲突的情况时,暂无法处理,表现为直接报错,导入数据失败。
- 该功能下数据导入过程会从批量插入变为单行插入,对应的导入性能会有所劣化。
- 该功能下UB-tree的索引构建过程会从批量构建变为单行构建,对应的索引构建性能会有所劣化。
- 在行级触发器中,即使操作表触发了约束冲突,该功能依然有效。行级触发器的约束冲突通过子事务来实现,子事务会占用更多的内存资源并延长执行时间。因此,建议在明确存在约束冲突的可能性时使用该特性。此外,在这种场景下,单次COPY导入的数据量不要过大,建议不超过1GB。
父主题: COPY导入导出最佳实践(集中式)