Postgresql
為什麼接受 int 的函式不能重載以接受間隔?
目前收到關於類型轉換的錯誤,
提示:無法選擇最佳候選函式。您可能需要添加顯式類型轉換。
假設我創建了一個重載函式
foo
CREATE FUNCTION foo(x int) RETURNS int AS $$ SELECT 1 $$ LANGUAGE sql; CREATE FUNCTION foo(x interval) RETURNS int AS $$ SELECT 2 $$ LANGUAGE sql;
我怎麼會呼叫那個函式,
SELECT foo('5 days');
我明白了,
ERROR: function foo(unknown) is not unique LINE 1: SELECT foo('5 days'); ^ HINT: Could not choose a best candidate function. You might need to add explicit type casts.
受調查
generate_series
和 irc.freenode.net/#postgresql 上的對話啟發的問題
這樣做的原因是因為
'5 days'
在這一點上本質上是'5 days'::unknown
. 從那裡開始,問題是正確的選擇是否
'5 days'::int
要麼'5 days'::interval
當然,
'5 days'::int
是無效的,但是unknown -> int
是必需的,所以你可以說SELECT '5' + 5;
. PostgreSQL 不知道“5 天”會在它嘗試之後拋出異常,因為兩者的類型相同,它只是放棄而不是隨機猜測。沒有很好的解決方法。