Hubert 'depesz' Lubaczewski:等待 PostgreSQL 17 —— 添加新的 COPY 选项 LOG_VERBOSITY。

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

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。

🏷️

标签

➡️

继续阅读