PostgreSQL 42P18: indeterminate_datatype 报错 故障修复 远程处理

文档解释

42P18: indeterminate_datatype

错误说明

错误“indeterminate_datatype” 是意即在PostgreSQL中定义的数据类型的未知性,也称为未知(undecided)数据类型。它通常发生在一个表中存在多个列具有不同的数据类型时。为了避免在查询过程中抛出这个错误,表单应该写正确的相关语句,且在每一列和每一表都应该正确指定列的数据类型。

常见案例

当我们在一个表中定义若干个列时,并且指定了每一列的数据类型,但是其中一个列在查询处理时却没有选择正确的数据类型时,就会抛出此错误。此错误的发出是由于PostgreSQL框架的设计,它会在表单编译完成后,前去表单中某列的数据类型是否有效。

解决方案

最佳的解决方案是遵守列的数据类型的规范,确保每一列的数据类型在SQL中都正确定义,有效的数据类型才能够正确的引用。当定义表时,使用ALTER TABLE语句来修改表单中列的数据类型。或者,您也可以使用DROP COLUMN语句,将与indeterminate_datatype 错误有关的列删除,再添加上正确的列并使用正确的数据类型。

另一种解决方法是使用CASE表达式。CASE表达式是基于列列值对其进行类型转换,可以使用CAST将字符串和数字强制转换成需要的数据类型,像这样:

CASE WHEN = 1 THEN CAST( AS INTEGER) ELSE CAST( AS DOUBLE PRECISION) END

可以使用函数如果字段的类型用于给表一个新的数据类型,像这样:

ALTER TABLE

ALTER COLUMN TYPE USING

使用此查询可以更改列的数据类型,并为其提供转换函数。


数据运维技术 » PostgreSQL 42P18: indeterminate_datatype 报错 故障修复 远程处理