【发布时间】:2025-08-29 12:50:01
【问题描述】:
有没有办法找出与每个外部表关联的所有错误表的列表。
实际要求:我在 Greenplum 中使用外部表和来自文件形式的源数据,通过外部表将数据摄取到 Greenplum。我想向源系统报告所有被拒绝的行
问候, 古鲁普里特
【问题讨论】:
-
每个外部表不需要自己的错误表。数据库中的所有外部表都可以共享一个错误表。这可能会让您的问题一开始就消失。
有没有办法找出与每个外部表关联的所有错误表的列表。
实际要求:我在 Greenplum 中使用外部表和来自文件形式的源数据,通过外部表将数据摄取到 Greenplum。我想向源系统报告所有被拒绝的行
问候, 古鲁普里特
【问题讨论】:
您基本上只是使用内置函数 gp_read_error_log() 并传入外部表名来获取与文件关联的错误。上面的链接也有一个例子。
【讨论】:
pg_exttable 的fmterrtbl 字段包含任何外部表的错误表的 oid。所以查找数据库中所有外部表的错误表的查询是:
SELECT
external_namespace.nspname AS external_schema, external_class.relname AS external_table,
error_namespace.nspname AS error_schema, error_class.relname AS error_table
FROM pg_exttable AS external_tables
INNER JOIN pg_class AS external_class ON external_class.oid = external_tables.reloid
INNER JOIN pg_namespace AS external_namespace ON external_namespace.oid = external_class.relnamespace
LEFT JOIN (
pg_class AS error_class
INNER JOIN pg_namespace AS error_namespace ON error_namespace.oid = error_class.relnamespace
) ON error_class.oid = external_tables.fmterrtbl
对于没有错误表的外部表,error_schema 和 error_table 字段将为 NULL。
【讨论】: