2011-01-20 64 views
1

的Funambol公司管理文檔中有對新的PostgreSQL的情況下,這是更嚴格的類型和鑄造運行,你必須添加這些石膏:限制投的範圍只架構PostgreSQL中

CREATE FUNCTION pg_catalog.text(bigint) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int8out($1));'; 
CREATE CAST (bigint AS text) WITH FUNCTION pg_catalog.text(bigint) AS IMPLICIT; 
CREATE FUNCTION pg_catalog.text(integer) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int4out($1));'; 
CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT; 

的問題是,在同一個數據庫(PostgreSQL裏的術語)我也有其他模式的應用程序打破了,因爲這些類型轉換(與「經營者不是唯一:未知||整數」,並提示「無法選擇最佳候選操作,您可能需要添加。顯式類型轉換「)。

所以,一個解決方法當然是定義附加數據庫,並只Funambol的在那裏。但我想知道是否有方法來定義這些轉換,以便它們只在Funambol的模式中生效,而不在整個數據庫中生效。

+4

最好的解決方法是修復(碎)應用程序,它依賴於隱式轉換(這幾乎總是一件壞事)。但這顯然不是你想要聽到的解決方案;) – 2011-01-20 07:31:05

+0

我同意。瘋狂的事情是,他們在他們的管理手冊/文檔中寫道,你必須添加這種類型作爲解決方案。所以這個問題是衆所周知的。修復文檔中的錯誤。一個新的範例對我來說。 ;-) – Mitar 2011-01-25 05:03:05

回答

0

不,這不可能在你想象的方式。轉換由源和目標類型標識,因此,如果兩種類型都是內置類型之一,那麼數據庫的所有用戶將在它們之間看到相同的轉換。唯一的解決方法是創建內置數據類型的克隆,但不要去那裏。 ;-)

所以,你要麼需要尋求與Funambol的修復,或者您的應用程序分成不同的數據庫,也許他們喜歡的東西dblink的背部連接在一起。