這裏的問題是'' as name
實際上並未指定值的類型。它的類型是unknown
,PostgreSQL通常從你插入的列或者你傳遞給它的函數等事情推斷出真正的類型。
在這種情況下,你把它傳遞給array_agg
,這是一個polymorphc功能。它可以輸入僞類型anyelement
,這實際上意味着「在運行時找出它」。
PostgreSQL仍然會計算出來,但array_to_string
實際上並沒有將text[]
作爲輸入。它需要anyarray
- 另一種多態類型,如數組anyelement
。
因此查詢中沒有任何內容告訴PostgreSQL ''
是什麼類型。它可能會猜測你的意思是text
,但是這太過挑剔了。所以它抱怨。這個問題可以簡化到:
regress=> SELECT array_to_string(array_agg(''), ',');
ERROR: could not determine polymorphic type because input has type "unknown"
爲了解決這個問題,寫一個類型文字:
TEXT '' AS name
或使用強制:
CAST('' AS text) AS name
或PostgreSQL的簡寫:
''::text
示例:
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)
將NULL轉換爲某種數據類型或放棄它,因爲您不使用它。 –