sql >> Database >  >> RDS >> PostgreSQL

Kan het polymorfe type niet bepalen omdat het type onbekend is

Het probleem hier is dat '' as name specificeert niet echt een type voor de waarde. Het is de unknown type, en PostgreSQL leidt het echte type meestal af uit zaken als in welke kolom je het invoegt of aan welke functie je het doorgeeft.

In dit geval geef je het door aan array_agg , wat een polymorfe . is functie. Het kan invoer van het pseudo-type anyelement , wat eigenlijk gewoon betekent "het uitvinden tijdens runtime".

PostgreSQL zou het nog steeds uitzoeken, behalve dat array_to_string neemt niet echt een text[] als invoer. Het duurt anyarray - een ander polymorf type, zoals anyelement voor arrays.

Dus er is niets in de query om PostgreSQL te vertellen welk type dat '' is. Het zou kunnen raden dat je text bedoelde , maar daar is het een beetje te kieskeurig voor. Het klaagt dus. Het probleem wordt vereenvoudigd tot:

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

Om dit op te lossen, schrijf een getypte letterlijke:

TEXT '' AS name

of gebruik een cast:

CAST('' AS text) AS name

of de PostgreSQL-afkorting:

''::text

voorbeelden:

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)



  1. Variabelen voor identifiers binnen IF BESTAAT in een plpgsql-functie

  2. mysql - drie tabellen opvragen

  3. Blob importeren via SAS vanuit ORACLE DB

  4. Updaten en bestellen met ms sql