sql >> Databasteknik >  >> RDS >> PostgreSQL

Det gick inte att bestämma polymorf typ eftersom indata har okänd typ

Problemet här är att '' as name anger faktiskt inte en typ för värdet. Det är den unknown typ, och PostgreSQL härleder vanligtvis den verkliga typen från saker som vilken kolumn du infogar den i eller vilken funktion du skickar den till.

I det här fallet skickar du det till array_agg , som är en polymorphc fungera. Den kan ta indata av pseudotypen anyelement , vilket egentligen bara betyder "få reda på det vid körning".

PostgreSQL skulle fortfarande ta reda på det förutom att array_to_string tar faktiskt inte en text[] som input. Det tar anyarray - en annan polymorf typ, som anyelement för arrayer.

Så det finns inget i frågan som talar om för PostgreSQL vilken typ av den '' är. Det skulle kunna gissa att du menade text , men det är lite för kinkigt för det. Så det klagar. Problemet förenklas till:

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

För att lösa detta, skriv en maskinskriven bokstavlig:

TEXT '' AS name

eller använd en cast:

CAST('' AS text) AS name

eller PostgreSQL-stenografin:

''::text

exempel:

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. Infoga stora objektdata i Salesforce.com från SQL Server

  2. Hur man konverterar int till datum i SQL Server 2008

  3. Google kartlägger kontinuerlig x-axel från php-array

  4. Hur man låser en enda rad