Hubert 'depesz' Lubaczewski:等待 PostgreSQL 17 —— 添加新的 COPY 选项 LOG_VERBOSITY。
内容提要
2024年4月1日,Masahiko Sawada提交了一个补丁,添加了一个新的COPY选项LOG_VERBOSITY,用于控制处理过程中发出的消息数量。有效值为'default'和'verbose'。当ON_ERROR选项设置为ignore时,在COPY FROM中使用。指定'verbose'时,会为每个丢弃的行发出一个NOTICE消息,提供额外的信息,帮助用户识别加载失败的有问题的行。
延伸解读
LOG_VERBOSITY 的适用条件
LOG_VERBOSITY 选项仅在 COPY FROM 命令中与 ON_ERROR IGNORE 一起使用时生效。如果未设置 ON_ERROR 为 ignore,指定 LOG_VERBOSITY 不会产生任何效果。因此,它专为需要跳过错误行并获取详细日志的场景设计,帮助用户在不中断数据加载的情况下识别问题行。
verbose 模式下的通知内容
当 LOG_VERBOSITY 设置为 verbose 时,对于每个被丢弃的行,PostgreSQL 会发出一个 NOTICE 消息。该消息包含行号、列名以及导致错误的原始值,例如“skipping row due to data type incompatibility at line 2 for column y: "b"”。这些信息直接指出问题所在,方便用户快速定位和修复数据。
与默认行为的对比
在默认情况下,使用 ON_ERROR IGNORE 时,PostgreSQL 只会报告跳过的总行数,而不会提供每行的详细信息。启用 LOG_VERBOSITY verbose 后,用户可以获得每一行的具体错误原因,从而更精确地了解数据质量问题。这种增强的日志输出有助于调试和审计数据加载过程。
Q&A
LOG_VERBOSITY选项的作用是什么?
LOG_VERBOSITY选项用于控制COPY过程中发出的消息数量,帮助用户识别加载失败的行。
在使用COPY时,如何处理错误行?
可以使用ON_ERROR IGNORE选项来跳过不兼容的数据行,并结合LOG_VERBOSITY选项提供详细的通知信息。
使用LOG_VERBOSITY时会有什么输出?
指定'verbose'时,会为每个丢弃的行发出NOTICE消息,提供额外信息,如行号、列名和错误值。
PostgreSQL 17中的COPY功能有什么新特性?
PostgreSQL 17中的COPY功能增强了错误处理能力,并支持实时通知问题。
如何测试COPY功能的错误处理?
可以创建一个包含损坏数据的测试表,并尝试加载数据,观察错误处理和通知输出。
在COPY操作中,如何指定使用LOG_VERBOSITY?
在COPY命令中,可以通过在选项中添加(log_verbosity verbose)来指定使用LOG_VERBOSITY。