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)