Postgresql 我正在尝试创建以下索引

Postgresql 我正在尝试创建以下索引,postgresql,indexing,postgresql-9.5,Postgresql,Indexing,Postgresql 9.5,我得到了错误 错误:索引表达式中的函数必须标记为不可变 **********错误********** 错误:索引表达式中的函数必须标记为不可变 SQL状态:42P17 时间戳必须是带有时区的时间戳 您必须在适当的时区将表达式转换为不带时区的时间戳,从而使其不可变: CREATE INDEX request_response_partition_idx ON public.request_response_partition USING btree (userid,extract('Month

我得到了错误

错误:索引表达式中的函数必须标记为不可变 **********错误********** 错误:索引表达式中的函数必须标记为不可变 SQL状态:42P17 时间戳必须是带有时区的时间戳

您必须在适当的时区将表达式转换为不带时区的时间戳,从而使其不可变:

CREATE INDEX request_response_partition_idx
  ON public.request_response_partition USING btree (userid,extract('Month' from time_stamp));

当然,您还必须修改查询中的表达式以匹配索引。

您想要什么?列时间戳是什么数据类型?谢谢。它解决了我的问题。但在解释查询时,该索引未被扫描。解释从public.request\u response\u partition08中选择数据,其中userid=12025818和time\u stamp::date-to\u date'2019-08-10'、'YYYY-MM-DD'-interval'2 day'和'2019-08-10','yyyyy-MM-DD'+interval'2 day'不提供索引扫描。正如我在回答中所说,您还必须修改查询中的表达式以匹配索引。因此,时间戳的条件必须是从时区“UTC”的时间戳中提取“月”。。。。索引条件必须与查询中的thr表达式相同。
CREATE INDEX request_response_partition_idx
ON public.request_response_partition (
   userid,
   extract('Month' FROM (time_stamp AT TIME ZONE 'UTC'))
);