您甚至在进入function type resolution之前,输入都会失败,并在ARRAY constructor中出现语法错误-删除所有根本不应该包含在调用中的ARRAY构造函数后,由于其他类型不匹配,您将收到更多错误消息.
您的解决方案是传递匹配类型的单独参数,而不是数组.剩下的只是对我们所见内容的解释.
到底发生了什么
数组只能包含相同类型的值,但是您的输入将numeric constants与非数字string literal混合,无法解析.
如果希望它解析为text [](文本数组),则必须提供如下字符串文字:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
或直接使用数组文字,如下所示:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
但是,一旦使用数字常量启动了ARRAY构造函数,就只能添加数字类型了.或至少包含可强制转换为相同类型的内容的字符串文字.你可以:
SELECT ARRAY[1004, 2, 1079412, '1'];
…产生int [].要么:
SELECT ARRAY[1004, 2, 1079412, 1.0];
甚至:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
…两者都导致numeric [].
但是,ARRAY [1004,2,1079412,’WwLEA6XZ0V’]是非法的,这是正确的.
Convert all inputs to the selected type. Fail if there is not a conversion from a given input to the selected type.
由于字符串文字’WwLEA6XZ0V’无法转换为整数.