невозможно выбрать данные из словаря внутри списка - PullRequest
0 голосов
/ 08 февраля 2019

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

Table with data

Моя проблема в том, что эти словари находятся внутри списка, и когда я пытаюсь получить к ним доступ с помощью:

SELECT *
FROM public.monitoring_environmentalcontrol
WHERE celery_status->'queue'='0'

Я ничего не получаю:

Result table

1 Ответ

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

Вы можете использовать функцию jsonb_array_elements DOC для достижения вашей цели плюс LATERAL JOIN 7.2.1.5.LATERAL Подзапросы на нем:

Это созданная мной установка:

create table test (
  id int, 
  celery_status jsonb
);

insert into test values 
(1,'[{"queue":"a"}, {"queue":"b"}, {"queue":"c"}]'),
(2,'[{"queue":"d"}, {"queue":"e"}, {"queue":"f"}]'),
(3,'[{"queue":"g"}, {"queue":"h"}, {"queue":"i"}]');

Это запрос:

select t.id, t.celery_status, obj->>'queue'
from test t
     join lateral
     jsonb_array_elements(t.celery_status) obj(value) on obj->>'queue' = 'a'

Вы можете видеть, что он работает здесь: http://sqlfiddle.com/#!17/bf7bf/6

...