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)