根据关于 ARRAY 构造函数的 PostgreSQL 文档:
默认情况下,数组元素类型是成员表达式的通用类型,使用与 UNION 或 CASE 构造相同的规则确定(参见第 10.5 节)。您可以通过将数组构造函数显式转换为所需类型来覆盖它,例如:
SELECT ARRAY[1,2,22.7]::integer[];
array
----------
{1,2,23}
(1 row)
这适用于将元素转换为整数和简单类型:
SELECT ARRAY[ 'name', 1]::text[];
array
----------
{name,1}
(1 row)
但转换似乎不适用于复杂元素,例如数组元素:
SELECT ARRAY[ 'name', 1, ARRAY['world']]::text[];
ERROR: malformed array literal: "name"
LINE 1: SELECT ARRAY[ 'name', 1, ARRAY['world']]::text[];
^
DETAIL: Array value must start with "{" or dimension information.
我的问题是:
有没有办法让自动转换工作text[]
?
(即无需编写即可进行上述转换SELECT ARRAY[ 'name'::text, 1::text, ARRAY['world']::text];
)
从 PostgreSQL 14 开始,如果它有一个数组元素,自动类型转换似乎不起作用。数组元素必须显式转换为文本: