Я пытаюсь создать индекс на основе года-месяца поля метки времени (например, 2018-03
).
Изначально я пытался сделать:
create index tmp_year_mo on my_table
((to_char(DATE(ts_field AT TIME zone 'utc'), 'YYYY-MM')))
Но, к сожалению, вы получаете ERROR: functions in index expression must be marked IMMUTABLE
, потому что функция, очевидно, имеет изменяемый вывод. Это не имеет смысла для меня, так как я думал, что я удалил изменчивость вывода, установив часовой пояс в UTC (?).
У всех, кто делает это, кто писал об этом, была более простая проблема, такая как простое преобразование с использованием ::DATE
, что нормально, но мне нужен год-месяц.
Полагаю, что решением может быть создание в таблице нового столбца, заполнение его этим значением и индексация его, но есть ли выражение, которое будет работать в области CREATE INDEX?