PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Impossibile determinare il tipo polimorfico perché l'input ha un tipo sconosciuto

Il problema qui è che '' as name in realtà non specifica un tipo per il valore. È il unknown type e PostgreSQL di solito deduce il tipo reale da cose come la colonna in cui lo stai inserendo o la funzione a cui lo passi.

In questo caso, lo passi a array_agg , che è un polimorfo funzione. Può accettare input dello pseudo-tipo anyelement , che in realtà significa solo "capirlo in fase di esecuzione".

PostgreSQL lo capirebbe comunque tranne che array_to_string in realtà non accetta un text[] come input. Ci vuole anyarray - un altro tipo polimorfico, come anyelement per gli array.

Quindi non c'è nulla nella query che dica a PostgreSQL quale tipo di '' è. Potrebbe indovinare che intendevi text , ma è un po' troppo esigente per quello. Quindi si lamenta. Il problema si semplifica fino a:

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

Per risolvere questo problema, scrivi un letterale digitato:

TEXT '' AS name

oppure usa un cast:

CAST('' AS text) AS name

o la scorciatoia PostgreSQL:

''::text

esempi:

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)