Используйте оператор ->>
select *
from temp
where all_data ->> 'Accountid' = '1364';
Онлайн пример для 9.3: http://sqlfiddle.com/#!15/55981/1
Однако приведенное выше не будет работать, если JSON содержит массив вместо объекта JSON. Например. значение типа '[1,2]'::json
приведет к сбою этого запроса.
Начиная с версии 9.4 и выше, вы можете проверить это, используя json_typeof()
, но с вашей, скорее всего, неподдерживаемой версией, единственный обходной путь, о котором я могу подумать, - это преобразовать столбец в текст и исключить те, которые начинаются с [
with valid_rows as (
select *
from temp
where all_data::text not like '[%'
)
select *
from valid_rows
where all_data ->> 'Accountid' = '1364';
Онлайн пример для 9.3: http://sqlfiddle.com/#!15/d01f43/3