我正在尝试根据时间戳字段的年月创建索引(例如 2018-03
)。
最初我尝试这样做:
create index tmp_year_mo on my_table
((to_char(DATE(ts_field AT TIME zone 'utc'), 'YYYY-MM')))
但不幸的是,您得到错误:索引表达式中的函数必须标记为IMMUTABLE
,因为该函数显然具有可变输出。这对我来说不太有意义,因为我认为我通过将时区设置为 UTC(?)来消除输出的可变性。
其他执行此操作并发布相关信息的人都遇到了一个更简单的问题,例如仅使用 ::DATE
转换进行转换,这很好,但我需要年月。
我猜解决方案可能是在表中创建一个全新的列,然后用该值填充它,然后对其进行索引,但是是否有一个表达式可以在 CREATE INDEX 领域内工作?
最佳答案
这应该有效:
create index tmp_year_mo on my_table
((date_trunc('month',ts_field at time zone 'utc')))
https://www.postgresql.org/message-id/f6b42095-5fe2-4f6a-8c49-6bd49badb3ad%40mm
you can shift your timestamptz to a fixed timezone
https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
关于sql - 如何根据时间戳的年份和月份创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50158471/