O problema aqui é que
'' as name
na verdade não especifica um tipo para o valor. É o unknown
type, e o PostgreSQL geralmente infere o tipo real de coisas como em qual coluna você está inserindo ou para qual função você o passa. Nesse caso, você o passa para
array_agg
, que é um polimorfo função. Pode receber entradas do pseudo-tipo anyelement
, que realmente significa apenas "descobrir em tempo de execução". PostgreSQL ainda descobriria, exceto que
array_to_string
na verdade não recebe um text[]
como entrada. Leva anyarray
- outro tipo polimórfico, como anyelement
para matrizes. Portanto, não há nada na consulta para dizer ao PostgreSQL que tipo de
''
é. Pode adivinhar que você quis dizer text
, mas é um pouco exigente demais para isso. Então reclama. A questão simplifica-se para:regress=> SELECT array_to_string(array_agg(''), ',');
ERROR: could not determine polymorphic type because input has type "unknown"
Para resolver isso, escreva um literal digitado:
TEXT '' AS name
ou use um elenco:
CAST('' AS text) AS name
ou a abreviação do PostgreSQL:
''::text
exemplos:
regress=> SELECT array_to_string(array_agg(TEXT ''), ',');
array_to_string
-----------------
(1 row)
regress=> SELECT array_to_string(array_agg(''::text), ',');
array_to_string
-----------------
(1 row)
regress=> SELECT array_to_string(array_agg(CAST('' AS text)), ',');
array_to_string
-----------------
(1 row)