Postgresql Создание индекса для отметки времени в заданном часовом поясе - PullRequest
0 голосов
/ 23 марта 2020

Я хочу создать индекс для столбца, который хранит метку времени внутри значения JSON в Postgres. Индекс также необходимо преобразовать в часовой пояс. Это запрос, который мне нужно выполнить,

SELECT count(*) FROM reservations 
WHERE (((json #>> ‘{details, attributes, checkIn}‘)::timestamptz
        at time zone
        (json #>> ‘{details, attributes, destinationTimeZone}’)
      )) >= ‘2020-03-17’
  AND (((json #>> ‘{details, attributes, checkIn}‘)::timestamptz
        at time zone
        (json #>> ‘{details, attributes, destinationTimeZone}’)
      )) < ‘2020-04-01’;

Я пытался создать индексы как:

1)

CREATE INDEX CONCURRENTLY hotelUuid_checkIn_index3 ON reservations 
  (TO_TIMESTAMP(json ->> '{details,attributes,checkIn}')::timestamptz);

ошибка: " функции в индексе Выражение должно быть помечено IMMUTABLE"

2)

CREATE INDEX CONCURRENTLY hotelUuid_checkIn_index3 ON reservations 
    (TO_TIMESTAMP(json ->> '{details,attributes,checkIn}'));

error:" Нет функции, соответствующей заданному имени и типу аргумента. Возможно, вам потребуется добавить явное приведение типов ."

3)

CREATE INDEX CONCURRENTLY hotelUuid_checkIn_index3 ON reservations 
  (((json ->> '{details,attributes,checkIn}')::timestamptz) AT TIME ZONE 'America/SanTiego');

ошибка:" Нет функции, соответствующей заданному имени и типу аргумента. Возможно, вам придется добавить явные приведения типов"

Я знаю, что это неправильный способ создания индекса, поскольку это будет непроизводительным расходом, но в данный момент я не хочу изменять свои логики вставки данных c. Вот почему мне нужно создать индекс.

Я использую Postgresql 9.4.8 версию.

...