PostgreSQL 42725: ambiguous_function 报错 故障修复 远程处理
文档解释
42725: ambiguous_function
错误说明
PostgreSQL版本9.5引入函数,ambiguous_function错误主要发生在当创建函数时,函数存在二义性,即有两个函数可以满足其调用条件,但是搜索结果只找到一个函数,导致不能确定调用哪个函数,从而导致程序出错。
常见案例
ambiguous_function错误常见于对某列以多种数据类型调用同名函数。在特定情况下,比如给定的参数类型可以是整数或者字符串,或者给定函数的参数(column name)的时候,PostgreSQL可能会搜索到两个同名函数,最终导致ambiguous_function错误。
例如,我们在表TABLE1中有两列 col1、col2,col1数据类型为INT,col2数据类型为VARCHAR,当我们试图对列col1和col2通过同一函数调用计算,在调用时没有特殊指明类型,比如:
SELECT SUM(function(col1,col2)) FROM TABLE1;
那么 PostgreSQL系统会检测到可能有两个函数满足此条件:
sum(INT,INT)
sum(VARCHAR, VARCHAR)
由于无法判断哪样满足,这就会导致ambiguous_function错误。
解决方法
解决类似ambiguous_function错误最常见的做法就是手动声明函数的参数类型,通过特别指出参数的类型,就可以解决此错误。例如:
SELECT SUM(function::integer(col1,col2)) FROM TABLE1;
上述代码表明要使用的函数为:sum(INT,INT) ,解决了函数二义性问题,避免出现ambiguous_function错误。
另一种解决方法是重命名函数名称,以避免重复函数,这样做可以有效解决ambiguous_function错误,但可能会给调用和维护带来麻烦。
总的来说,当出现ambiguous_function错误的时候,我们需要考虑调整函数的调用或者重构函数的声明。