PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Der polymorphe Typ konnte nicht bestimmt werden, da die Eingabe einen unbekannten Typ hat

Das Problem hier ist, dass '' as name gibt nicht wirklich einen Typ für den Wert an. Es ist der unknown type, und PostgreSQL leitet den echten Typ normalerweise aus Dingen ab, wie z. B. in welche Spalte Sie ihn einfügen oder an welche Funktion Sie ihn übergeben.

In diesem Fall übergeben Sie es an array_agg , das ein polymorphes ist Funktion. Es kann Eingaben vom Pseudotyp anyelement annehmen , was eigentlich nur "zur Laufzeit herausfinden" bedeutet.

PostgreSQL würde es immer noch herausfinden, außer dass array_to_string nimmt eigentlich keinen text[] als Eingang. Es braucht anyarray - ein anderer polymorpher Typ, wie anyelement für Arrays.

Die Abfrage enthält also nichts, was PostgreSQL mitteilt, welcher Typ dieser '' ist ist. Es könnte vermuten, dass Sie text meinten , aber dafür ist es etwas zu pingelig. Also klagt es. Das Problem vereinfacht sich zu:

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

Um dies zu lösen, schreiben Sie ein typisiertes Literal:

TEXT '' AS name

oder verwenden Sie eine Umwandlung:

CAST('' AS text) AS name

oder die PostgreSQL-Kurzschrift:

''::text

Beispiele:

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)