2016-03-03 22 views
0

PostgreSQL是無法與用戶在這種情況下那麼友善,有沒有什麼方法可以自動將文字轉換爲文本來定義爲anyelement的參數?

CREATE FUNCTION foo(anyelement) RETURNS text AS $$ 
    SELECT 'The type is ' || pg_typeof($1); 
$$ LANGUAGE SQL IMMUTABLE; 

SELECT foo(123); -- OK 
SELECT foo('123'::text); -- OK 
SELECT foo('123'); -- ERROR 

有一個「選項」,一個(低成本)的解決辦法,以避免這種中斷?

也許一些「自動鑄造」的文字到文字轉換?在pg9 +沒有關於它的消息?

+0

您可以使用顯式參數類型爲您聲明重載函數:CREATE FUNCTION foo(anyelement)RETURNS text AS ...; CREATE FUNCTION foo(text)RETURNS text AS ...;' – Abelisto

回答

2

在PostgreSQL中,「文字」符號用於表示不同類型的數據。比如所有的以下表述是否正確,返回不同類型的有效結果:

select ('123':: bytea) 
select ('123':: money) 
select ('123':: float) 
select ('123':: text) 
select ('123':: integer) 
select ('123':: json) 
... 

,這樣的語法'123'是模棱兩可的,Postgres並沒有提供任何自動皈依,至少在目前的版本(並可能在未來的版本中)。

+0

謝謝,很好的確認(!)*「不支持」的假設* ...我認爲這不僅僅是「無朋友」的問題,一個執行問題:有些情況(例如configs)系統使用文字,函數會執行錯誤,異常處理對於函數性能和「乾淨代碼」庫來說是一個很大的開銷。 –

相關問題