gpt4 book ai didi

postgresql - 是否可以在 Postgres 的索引中使用稳定函数?

转载 作者:行者123 更新时间:2023-11-29 11:43:49 25 4
gpt4 key购买 nike

我一直在处理一个项目,并且意识到我必须在几个查询的 WHERE 子句中调用一个函数。性能并不糟糕,但我很乐意改进它。所以我看了看 docs for indexes其中提到:

An index field can be an expression computed from the values of one or more columns of the table row.

太棒了。所以我尝试创建一个索引:

在 foo_table (stable_function(foo_column)) 上创建索引 idx_foo;

并收到一个错误:

ERROR: functions in index expression must be marked IMMUTABLE

然后我读到了 Function Volatility Categories这是关于稳定波动的说法:

In particular, it is safe to use an expression containing such a function in an index scan condition.

根据措辞“索引扫描条件”,我猜它并不意味着实际的索引。那是什么意思呢?是否可以在索引中使用稳定函数?还是我们必须一路走下去,确保它作为一个不可变函数工作?

我们使用的是 Postgres v9.0.1。

最佳答案

“索引扫描条件”是一个搜索 条件,可以使用一个可变函数,该函数将在处理的每一行中调用。索引定义只能使用不可变的函数——也就是说,当使用任何给定的参数集调用时,该函数将始终返回相同的值,并且没有用户可见的副作用。如果您稍微考虑一下,您应该能够看到如果函数返回的值与创建索引条目时返回的值不同,您会遇到什么样的麻烦。

您可能想对数据库撒谎并将函数声明为不可变的,但实际上并非如此;但如果您这样做,数据库可能会做一些您不希望它做的令人惊讶的事情。

9.0.1 存在可修复的错误。请升级到 9.0。一些最新的

http://www.postgresql.org/support/versioning/

关于postgresql - 是否可以在 Postgres 的索引中使用稳定函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10390777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com