查找哪个列在查询中导致postgresql异常。

时间:2014-08-29 12:11:31

标签: sql postgresql amazon-redshift

我在Redshift中有一个包含大约200列的临时表。我首先将数据从S3复制到此表,然后使用大型插入从查询中将数据从此表复制到另一个表。登台表中的大多数字段都是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 个答案:

答案 0 :(得分:0)

我使用Netezza,它也可以使用正则表达式函数来渲染行。幸运的是,redshift也支持regexp。请看一下

http://docs.aws.amazon.com/redshift/latest/dg/REGEXP_COUNT.html

因此,在您的情况下,想法是在where子句中使用regexp,这样您就可以找到哪些值超出了插入期间发生的数值转换。问题是找到识别数据,允许您确定物理文件中的哪些行导致问题。您可以创建另一个数据副本并在临时表中创建行号。使用临时表作为分析源。你要进入的数字字段有多大?如果您要将多个列强制转换为数字,则可能需要针对多个列进行此分析。