Postgresql JSONB против даты и времени - PullRequest
0 голосов
/ 10 января 2019

Мне нужно хранить две даты valid_from и valid_to.

Лучше ли использовать два поля даты и времени, например valid_from: datetime и valid_to: datatime.

Было бы лучше хранить данные в поле действия jsonb: {"from": "2001-01-01", "to": "2001-02-02"}

Гораздо больше операций чтения, чем записи в базу данных. БД: PostgresSQL 9.4

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы можете использовать daterange тип: то есть:

  • '[2001-01-01, 2001-02-02]'::daterange означает от 2001-01-01 до 2001-02-02 переплет включительно
  • '(2001-01-01, 2001-02-05)'::daterange означает от 2001-01-01 2001-02-05 привязано эксклюзивно

Также:

  • Специальное значение, например Infinite, можно использовать
  • lower(anyrange) => нижняя граница диапазона
  • и многие другие, например оператор перекрытия, см. В документах; -)

Тип диапазона

0 голосов
/ 10 января 2019

Используйте два столбца timestamp (в Postgres нет типа datetime).

Они могут быть эффективно проиндексированы и защищают вас от недопустимых значений меток времени - ничто не мешает вам хранить "2019-02-31 28:99:00" в значении JSON.

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

...