如何在PostgreSQL上使用date_trunc函数的表达式上创建索引?

时间:2018-07-13 22:46:20

标签: postgresql

当我尝试使用date函数在类型date_trunc的表字段上的表达式上的PostgreSQL中创建索引时,出现以下错误。

functions in index expression must be marked IMMUTABLE

我该如何解决?

从对StackOverflow和Google的搜索来看,这似乎是一个常见问题。我的麻烦是,似乎最常见的建议解决方案不起作用。建议的最常见解决方案是将date字段设为timestamp with timezone。这是一个例子。

create table test (foo date);
create index on test (date_trunc('month', foo at time zone 'GMT'));

据我所知,该create index...语句的形式是普遍建议的解决方案。但是,正如我所说,这不会改变我的结果。我仍然收到上面列出的错误。

顺便说一下,这是PostgreSQL 9.6.9版。

1 个答案:

答案 0 :(得分:0)

只有date_trunc(text,interval)date_trunc(text,timestamp)是不可变的

create index on test (date_trunc('month', foo::timestamp ));

foo at time zone 'GMT'的问题在于表达式foo at time zone 'GMT'本身并不是不可变的。