El problema aquí es que '' as name
en realidad no especifica un tipo para el valor. Es el unknown
type, y PostgreSQL generalmente infiere el tipo real a partir de cosas como en qué columna lo está insertando o a qué función lo pasa.
En este caso, lo pasas a array_agg
, que es un polimórfico función. Puede tomar entradas del pseudo-tipo anyelement
, que en realidad solo significa "descifrarlo en tiempo de ejecución".
PostgreSQL aún lo resolvería excepto que array_to_string
en realidad no toma un text[]
como entrada Toma anyarray
- otro tipo polimórfico, como anyelement
para matrices.
Así que no hay nada en la consulta que le diga a PostgreSQL qué tipo de ''
es. Podría adivinar que te refieres a text
, pero es un poco demasiado quisquilloso para eso. Así se queja. El problema se simplifica a:
regress=> SELECT array_to_string(array_agg(''), ',');
ERROR: could not determine polymorphic type because input has type "unknown"
Para resolver esto, escriba un literal escrito:
TEXT '' AS name
o usa un yeso:
CAST('' AS text) AS name
o la abreviatura de PostgreSQL:
''::text
ejemplos:
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)