Как выбрать данные из столбца jsonb?


У меня есть один столбец с типом jsonb. Данные в этом столбце выглядят следующим образом

{
    "random_number1":
    {
        "random_number2":
        {
            "Param1": 2,
            "Param2": 0,
            "Param3": 0,
            "Param4": 6,
            "Param5": 3
        }
    }
}

Как написать select для этого столбца, если я хочу, т. е. все строки, где "Param3" =6 ? Я попробовал что-то вроде этого

SELECT * FROM table WHERE column->'Param3' @> '6'::jsonb;
1 2

1 ответ:

Это зависит от ваших ожиданий.

Получаем значение заданного пути:

select *
from my_table
where my_col->'random_number1'->'random_number2'->>'Param3' = '6'

Получаем значение ключа Param3 любого объекта на третьем уровне:

select t.*
from my_table t,
jsonb_each(my_col) as level1(key1, value1),
jsonb_each(value1) as level2(key2, value2)
where jsonb_typeof(my_col) = 'object'
and jsonb_typeof(value1) = 'object'
and value2->>'Param3' = '6';

Во втором случае вы можете использовать distinct, поскольку запрос может выдавать дублированные строки.