POSTGRES JSONB Выбрать значение из вложенного массива

Я пытаюсь получить возможность равных перепродажам из следующего массива JSONB в Postgres. Но я, кажется, не могу этого понять.

{
    "done": true,
    "size": 106,
    "records": [{
        "Name": "FEF",
        "IsActive": true,
        "attributes": {
            "price": "3",
            "width": "20"
        },
        "Description": null,
        "Opportunity": "Resale"
    }, {
        "Name": "DHQ",
        "IsActive": true,
        "attributes": {
            "price": "300",
            "width": "10000"
        },
        "Description": null,
        "Opportunity": "Resale"
    }]
}
SELECT  salesdata 
FROM public.salesdata 
where salesdata -> 0 ->> '"records":[{"Opportunity":"Resale"}]';

Ошибка:

Ошибка SQL [42804]: ОШИБКА: аргумент WHERE должен иметь логический тип, а не текст


person lancegoh    schedule 31.12.2019    source источник
comment
я использую 12 версию postgre   -  person lancegoh    schedule 31.12.2019
comment
Какого результата вы ожидаете?   -  person a_horse_with_no_name    schedule 31.12.2019


Ответы (1)


Оператор ->> возвращает содержимое указанного элемента. Если вы хотите проверить наличие значения, используйте оператор contains @>

Кроме того, JSON верхнего уровня, который у вас есть, не является массивом, поэтому salesdata -> 0 не имеет смысла.

Чтобы проверить, содержит ли массив, идентифицированный ключом records, хотя бы одну пару ключ / значение с определенным значением, вы можете использовать:

SELECT salesdata 
FROM public.salesdata 
where salesdata -> 'records' @> '[{"Opportunity":"Resale"}]';
person a_horse_with_no_name    schedule 31.12.2019