2013年10月26日 星期六

EnterpriseDB Oracle Compatibility 分享 (4) - function immutable


最近使用index時,出現一個錯誤訊息,"錯誤:  索引運算式中的函式必須標示為 IMMUTABLE",
查詢PostgreSQL文件後, 才了解在函式使用時會指定查詢優化器有關功能的行為, 例如有些函式的結果是變動的如 random(), currval(), timeofday()等,
而索引內使用到的函式必須是IMMUTABLE, 也就是說函式本身不能修改資料庫, 並給出同樣的參數時, 總是回傳相同的結果, 以下例子為說明:

    1. 建立tablab資料表單

    2. 建立索引以to_char(col3,'YYYYMMDD') 為索引鍵,在建立即回覆錯誤, "錯誤:  索引運算式中的函式必須標示為 IMMUTABLE"



   3. 將函式 to_char 改為使用者自行定義函式 udf_to_char(),並在函式中設IMMUTABLE屬性

    4. 建立索引以 udf_to_char(col3,'YYYYMMDD') 為索引鍵,我們可以看到完成建立

總結: 建立索引時無法使用動態函式,需要設定屬性為 IMMUTABLE,實在有些不便,就程式能繼續運作這點來評估,有work around方式解決,這一切都值得。

沒有留言:

張貼留言

HDB 擴充套件 PXF (Pivotal Extension Framework) 應用

在Hadoop生態圈裡, 雖然擁有眾多生態系統工具, 但大多用戶仍然需要的是SQL的操作介面, Pivotal HDB 提供一個在Hadoop上運行的標準SQL引擎介面, 箇中好處開發者最能感受, 但本篇重點不在這, 哈哈~ 主要分享在HDB上可以輕易整合外部資料的應用. ...