De acordo com a documentação do PostgreSQL no construtor ARRAY :
Por padrão, o tipo de elemento array é o tipo comum das expressões de membro, determinado usando as mesmas regras das construções UNION ou CASE (consulte a Seção 10.5). Você pode substituir isso lançando explicitamente o construtor de matriz para o tipo desejado, por exemplo :
SELECT ARRAY[1,2,22.7]::integer[];
array
----------
{1,2,23}
(1 row)
Isso funciona para converter elementos em inteiros e para tipos simples:
SELECT ARRAY[ 'name', 1]::text[];
array
----------
{name,1}
(1 row)
Mas a conversão não parece funcionar para elementos complexos, como elementos de matriz:
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.
Minha pergunta é:
Existe uma maneira de fazer a conversão automática funcionar text[]
?
(ou seja, faça a conversão acima funcionar sem ter que escrever SELECT ARRAY[ 'name'::text, 1::text, ARRAY['world']::text];
)
A partir do PostgreSQL 14, parece que a conversão automática de tipos não funciona se tiver um elemento array. O elemento array deve ser explicitamente convertido em texto: