在查询中查找导致 postgresql 异常的列。
Posted
技术标签:
【中文标题】在查询中查找导致 postgresql 异常的列。【英文标题】:Finding which column caused the postgresql exception in a query. 【发布时间】:2014-08-29 12:11:31 【问题描述】:我在 Redshift 中有一个包含大约 200 列的临时表。我首先将数据从 S3 复制到此表,然后使用大型 insert into select from 查询将数据从该表复制到另一个表。 staging table 中的大多数字段都是 varchar,我在查询中将其转换为正确的数据类型。
我在临时表中获得了一些导致数字溢出的字段 -
org.postgresql.util.PSQLException: ERROR: Numeric data overflow (addition)
Detail:
-----------------------------------------------
error: Numeric data overflow (addition)
code: 1058
context:
query: 9620240
location: numeric.hpp:112
process: query1_194 [pid=680]
我怎样才能找到导致此溢出的字段,以便清理输入或更正查询。
【问题讨论】:
【参考方案1】:我使用 Netezza,它也可以使用正则表达式函数来 grep 行。幸运的是,redshift 也支持正则表达式。请看一下
http://docs.aws.amazon.com/redshift/latest/dg/REGEXP_COUNT.html
因此,您的想法是在 where 子句中使用正则表达式,这样您就可以找到哪些值超出了插入期间发生的数字转换。问题将是查找可让您确定物理文件中的哪些行导致问题的识别数据。您可以创建数据的另一个副本并在临时表中创建行号。使用临时表作为分析源。您要进入的数字字段有多大?如果您将多列转换为数字,则可能需要针对多于 1 列进行此分析。
【讨论】:
以上是关于在查询中查找导致 postgresql 异常的列。的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PostgreSQL 的子查询中选择包含值数组的列?
Postgresql 查询的过滤条件中的列上的字符串操作如何影响它选择的计划