Как я могу создать индекс на основе года и месяца метки времени? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь создать индекс на основе года-месяца поля метки времени (например, 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?

1 Ответ

0 голосов
/ 03 мая 2018

это должно работать:

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

Вы можете переместить свою временную метку в фиксированный часовой пояс

https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...