Я использую postgres 9.4 и тип jsonb. У меня есть следующая таблица:
CREATE TABLE jsonb_test (iid serial NOT NULL, data jsonb)
И следующие данные json в этой таблице:
{"date": "2016-01-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 12}, {"name": "caps", "price": 20}], "customer": {"name": "Customer 1", "email": "[email protected]"}}
{"date": "2015-12-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 1}, {"name": "caps", "price": 50}], "customer": {"name": "Customer 2", "email": "[email protected]"}}
Что я хотел бы сделать, так это получить все строки, в которых есть товар с ценой выше 30. В этом случае это вернет строку «Клиент 2».
Это мой запрос до сих пор:
SELECT * FROM jsonb_test WHERE jsonb_array_elements(jsonb_extract_path(data, 'items')) #> '{price}' > '0'
Но это не удается с ошибкой ERROR: argument of WHERE must not return a set
Кто-нибудь может сказать мне, как это сделать? Возможно ли это сделать для произвольного уровня вложенности?
Спасибо!