sql >> Base de Datos >  >> RDS >> PostgreSQL

No se pudo determinar el tipo polimórfico porque la entrada tiene un tipo desconocido

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)