Problemet her er, at '' as name
angiver faktisk ikke en type for værdien. Det er den unknown
type, og PostgreSQL udleder normalt den rigtige type fra ting som hvilken kolonne du indsætter den i, eller hvilken funktion du sender den til.
I dette tilfælde sender du det til array_agg
, som er en polymorphc fungere. Det kan tage input af pseudo-typen anyelement
, hvilket egentlig bare betyder "find ud af det under kørsel".
PostgreSQL ville stadig finde ud af det bortset fra array_to_string
tager faktisk ikke en text[]
som input. Det kræver anyarray
- en anden polymorf type, såsom anyelement
for arrays.
Så der er intet i forespørgslen til at fortælle PostgreSQL, hvilken type den ''
er. Det kunne gætte, at du mente text
, men det er lidt for nøjeregnende til det. Så det brokker sig. Problemet forenkler ned til:
regress=> SELECT array_to_string(array_agg(''), ',');
ERROR: could not determine polymorphic type because input has type "unknown"
For at løse dette, skriv et skrevet bogstav:
TEXT '' AS name
eller brug en rollebesætning:
CAST('' AS text) AS name
eller PostgreSQL-stenografien:
''::text
eksempler:
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)