2014-06-17 68 views
7

我有一個查詢這使輸出無法確定多態類型,因爲輸入類型「未知」

無法確定多態類型,因爲輸入類型「未知」

查詢:

select (array_to_string(array_agg(name), ', '))::text as name,path 
from(select 'fullpath' as Path,null as id,'' as name 
    from tblabc where key = 'key1' and value = '1' 
    ) as e 
group by path; 

我有一個的Postgres數據庫

+1

將NULL轉換爲某種數據類型或放棄它,因爲您不使用它。 –

回答

14

這裏的問題是'' 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) 
+0

正如你所說,我實現了這一點,但我得到了「未能找到轉換功能從未知到​​文字」 –

+1

@samkitshah適合我。請在您的問題更新中顯示查詢。同時顯示'SELECT version()'; –

+0

版本:PostgreSQL 8.4.5 ..嘗試所有更新後的查詢仍然沒有結果.. –

相關問題