У меня есть столбец jsonb (называемый info
) в Postgres, структура которого выглядит следующим образом:
{ name: 'john', house_id: null, extra_attrs: [{ attr_id: 4, attr_value: 'a value' }, { attr_id: 5, attr_value: 'another value' }] }
Он может иметь N extra_attrs
, но мы знаем, что у каждого из них будет всего два ключа: attr_id
и attr_value
.
Теперь, каков наилучший способ запроса info
, который имеет extra_attrs
с конкретными attr_id
и attr_value
.Я сделал это так, и это работает:
Учитывая следующую структуру данных для запроса:
[{ attr_id: 4, values: ['a value', 'something else'] }, { attr_id: 5, values: ['another value'] }]
Следующий запрос работает:
select * from people
where (info @> '{"extra_attrs": [{ "attr_id": 4, "attr_value": "a value" }]} OR info @> '{"extra_attrs": [{ "attr_id": 4, "attr_value": "something else" }]) AND info @> '{"extra_attrs": [{ "attr_id": 5, "attr_value": "another value" }]}
Iмне интересно, есть ли лучший способ сделать это, или это нормально.