PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Impossible de déterminer le type polymorphe car l'entrée a un type inconnu

Le problème ici est que '' as name ne spécifie pas réellement un type pour la valeur. C'est l'unknown type, et PostgreSQL déduit généralement le type réel à partir de choses comme la colonne dans laquelle vous l'insérez ou la fonction à laquelle vous le transmettez.

Dans ce cas, vous le transmettez à array_agg , qui est un polymorphe fonction. Il peut prendre des entrées du pseudo-type anyelement , ce qui signifie en fait "comprendre au moment de l'exécution".

PostgreSQL le comprendrait toujours sauf que array_to_string ne prend pas réellement un text[] comme entrée. Il faut anyarray - un autre type polymorphe, comme anyelement pour les tableaux.

Il n'y a donc rien dans la requête pour dire à PostgreSQL quel type ce '' est. Il pourrait deviner que vous vouliez dire text , mais c'est un peu trop pointilleux pour ça. Alors ça se plaint. Le problème se résume à :

regress=> SELECT array_to_string(array_agg(''), ',');
ERROR:  could not determine polymorphic type because input has type "unknown"

Pour résoudre ce problème, écrivez un littéral typé :

TEXT '' AS name

ou utilisez un plâtre :

CAST('' AS text) AS name

ou le raccourci PostgreSQL :

''::text

exemples :

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)