我们说我运行这样的查询(只是一个简单的例子):
update foo_table set field1=10000000000000, field2=100000000000000 where id=1;
我得到了
ERROR: integer out of range
我怎么知道"超出范围"字段为field1
还是field2
?是否有设置来获取更具体的错误消息?
答案 0 :(得分:2)
PostgreSQL通常可以告诉你哪个字段触发了错误。但在这种情况下,没有字段触发错误,所以它不能。在发生错误的阶段,正在解析文字,PostgreSQL还不知道它们被分配到字段。
但是,你应该得到一个比这更好的错误。考虑一下,例如
val joinDf=DF1.join(DF2, Seq("ColA"),"outer")
.withColumn("newCol", when(DF1("ColB").isNull, col("ColC"))
.otherwise(col("ColB")))
.select(col("colA"),col("newCol"))
但
+----+--------------+
|colA|newCol |
+----+--------------+
|1 |[[1,2], [1,3]]|
|3 |[[2,5], [3,4]]|
|2 |[[2,3], [3,4]]|
+----+--------------+
root
|-- colA: integer (nullable = true)
|-- newCol: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _1: integer (nullable = false)
| | |-- _2: integer (nullable = false)
(PostgreSQL 9.5)。
它可能无法显示此字段,但它应显示问题值和错误光标,如第一个示例。如果我有空的话,我会看看能否找到原因并提交补丁。
同时您可以通过引用整数值来解决它,以便将它们解析为未知类型的文字然后转换:
test=> SELECT INTEGER '10000000000000', INTEGER '100000000000000';
ERROR: value "10000000000000" is out of range for type integer
LINE 1: SELECT INTEGER '10000000000000', INTEGER '100000000000000';
(是的,这是SQL标准的)
两个调用的失败站点肯定是不同的:
test=> update foo set field1=10000000000000, field2=100000000000000 where id=1;
ERROR: integer out of range