Postgresql

為什麼接受 int 的函式不能重載以接受間隔?

  • November 10, 2017

目前收到關於類型轉換的錯誤,

提示:無法選擇最佳候選函式。您可能需要添加顯式類型轉換。

假設我創建了一個重載函式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 天”會在它嘗試之後拋出異常,因為兩者的類型相同,它只是放棄而不是隨機猜測。

沒有很好的解決方法。

您可以在 Functions: Type Conversion 下看到它

引用自:https://dba.stackexchange.com/questions/190599