我一直在工作的项目,并已经开始,我必须在几个查询WHERE子句中调用一个函数的实现。 性能并不可怕准确,但我很想来改善它。 所以,我看着文档的索引其中提到:
索引字段可以是从表中的行的一个或多个列的值来计算的表达式。
真棒。 所以,我想创建一个索引:
CREATE INDEX idx_foo ON foo_table (stable_function(foo_column));
并收到一个错误:
错误:在指数表达式函数必须被标记IMMUTABLE
于是我阅读功能易失性范畴 ,其有此说关于稳定波动:
特别地,它是安全的在索引扫描条件使用含有这样的函数的表达式。
基于短语“索引扫描条件”我猜,这并不意味着实际的指数。 所以,这是什么意思? 是否有可能利用在指数稳定的功能? 还是我们要一直走下去,并确保这样的工作作为一个不可变的功能?
我们使用的是Postgres v9.0.1。