Запрос столбца jsonb для соответствия массиву ключей - PullRequest
0 голосов
/ 24 января 2019

У меня есть таблица items, в которой есть столбец jsonb data.

Столбец data выглядит примерно так {"name": "aaa", "age": 23, "job": "dev"}.

Как выбрать элементы, которые data имеют только ключи name, age ?.

Ответы [ 2 ]

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

Используйте оператор delete -, пример:

with items (data) as (
values
    ('{"name": "aaa", "age": 23}'::jsonb),
    ('{"name": "aaa", "age": 23, "job": "dev"}'),
    ('{"name": "aaa", "age": 23, "gender": "f"}')
)

select *
from items
where data - 'name'- 'age' = '{}'

            data            
----------------------------
 {"age": 23, "name": "aaa"}
(1 row)

В Postgres 10+ вы можете использовать текстовый массив:

select *
from items
where data - array['name', 'age'] = '{}'
0 голосов
/ 24 января 2019

Вы можете использовать операторы ? и ?&.

Для вашего случая использования это будет:

SELECT * FROM table WHERE (NOT data ? 'job') AND (data ?& array ['name', 'age'])
...