Postgres 10, выберите из объекта json, содержащего массив объектов json - PullRequest
0 голосов
/ 03 декабря 2018

В базе данных у меня есть текстовое поле, содержащее json со структурой:

"Limits":{
  "fields":[
    {
      "key":"DAILY_LIMIT",
       "value":"1559",
       "lastModified":1543857829148,
    },
    {
      "key":"MONTHLY_LIMIT",
      "value":"25590",
      "lastModified":1543857829148,
    }
  ]
}

Мне нужно проверить, существует ли daily_limit.Это легко сделать с LIKE% DAILY_LIMIT%, но производительность не так хороша, и у меня не будет доступа к стоимости (сейчас мне это не нужно, но, возможно, в будущем это понадобится).Есть возможность проверить, существует ли этот ключ, не убивая БД?Я пытался с «Limits» -> «fields» -> но я не знаю, что должно быть дальше ... И это должно быть сделано с помощью запроса, я не могу передать объект в бэкэнд, а затем проверить его

1 Ответ

0 голосов
/ 04 декабря 2018

demo: db <> fiddle

Если вы хотите сделать это JSON, это может быть решением:

WITH data AS (
   SELECT 'somedata' as somedata, '{"Limits":{"fields":[{"key":"DAILY_LIMITS","value":"1559","lastModified":1543857829148},{"key":"MONTHLY_LIMIT","value":"25590","lastModified":1543857829148}]}}'::jsonb as data
)
SELECT 
    d.*
FROM data d, jsonb_array_elements(data -> 'Limits' -> 'fields')
WHERE value ->> 'key' = 'DAILY_LIMITS'

jsonb_array_elements расширяетмассив в одну строку каждый элемент.На следующем шаге вы можете проверить значение key.

Но демоверсия показывает, что простой LIKE будет намного быстрее, чем @ 404, упомянутый правильно (посмотрите на затратыобоих примеров.)

...