PostgreSQL:查询怎么可能是“不可变的”/功能性的?

Ced*_*tin 1 postgresql

我读过 PostgreSQL 可以有“功能性”索引。为此,您需要immutable关键字。

看到 PostgreSQL 是一个 CRUD 数据库,我完全不明白它是如何以功能方式工作的。

如果数据库有更新或删除,过去的查询如何保证相同查询的结果总是相同的?

Phi*_*lᵀᴹ 8

我认为您对函数式编程语言感到困惑。

无论如何,函数索引用于加快对数据的访问,其中访问数据的查询使用数据库函数。

举例来说,诸如此类的查询select blah from foo where sqrt(blah)=4必须sqrt()对 的每个值执行操作blah。您可以通过预先计算的所有值优化这个sqrt(blah)功能指数create index foo_func on foo (sqrt(blah));

这就是不变性的用武之地。当且仅当相同的输入总是给出相同的输出时,函数才是不可变的。函数索引只能使用不可变函数。这保证了对给定值和相关功能索引值的任何查询将始终返回相同的结果。