最近使用index時,出現一個錯誤訊息,"錯誤: 索引運算式中的函式必須標示為 IMMUTABLE",
查詢PostgreSQL文件後, 才了解在函式使用時會指定查詢優化器有關功能的行為, 例如有些函式的結果是變動的如 random(), currval(), timeofday()等,
而索引內使用到的函式必須是IMMUTABLE, 也就是說函式本身不能修改資料庫, 並給出同樣的參數時, 總是回傳相同的結果, 以下例子為說明:
1. 建立tablab資料表單
3. 將函式 to_char 改為使用者自行定義函式 udf_to_char(),並在函式中設IMMUTABLE屬性
4. 建立索引以 udf_to_char(col3,'YYYYMMDD') 為索引鍵,我們可以看到完成建立
總結: 建立索引時無法使用動態函式,需要設定屬性為 IMMUTABLE,實在有些不便,就程式能繼續運作這點來評估,有work around方式解決,這一切都值得。
沒有留言:
張貼留言