Индексирование и запрос значения int из массива JSON в PostgreSQL - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу создать таблицу со столбцом, содержащим jsonb тип данных.Как правильно индексировать и запрашивать значение типа int в массиве?

Запись:

{
  "list": [
    {
      "type": "FOO",
      "value": 1000
    },
    {
      "type": "BAR",
      "value": 200
    }
  ]
}

2 разных запроса. Я хочу найти все записи, содержащие элемент списка.,

  • Тип = 'FOO' И значение> 500
  • значение> 100

1 Ответ

0 голосов
/ 27 февраля 2019

Вы не сможете проиндексировать ни одно из > сравнений, но условие равенства может быть проиндексировано:

CREATE INDEX ON tabname USING gin (jsonbcol jsonb_path_ops);

Это может использоваться запросом, подобным следующему:

SELECT id FROM tabname
WHERE jsonbcol @> '{ "list": [ {"type": "FOO"} ] }';

Если вы планируете интенсивно использовать атрибуты JSON внутри базы данных, вы делаете что-то не так.Сохраняйте атрибуты, которые вы хотите индексировать, в обычных столбцах базы данных.В вашем случае это будет отдельная таблица, которая ссылается на вашу таблицу с внешним ключом, поэтому в каждой строке может быть несколько записей.

...