Мне нужно выбрать строку в которой есть определенное значение в json. С строками проблем нет. Положим я ищу строку в которой есть json в котором есть объект с «a» равным «2»:
xxx=> DROP TABLE IF EXISTS z;
DROP TABLE
xxx=> CREATE TABLE z (id bigint, value jsonb);
CREATE TABLE
xxx=> INSERT INTO z (id, value) VALUES (1, '{ "a" : "1" }');
INSERT 0 1
xxx=> INSERT INTO z (id, value) VALUES (2, '{ "a" : "2" }');
INSERT 0 1
xxx=> INSERT INTO z (id, value) VALUES (3, '{ "a" : "3" }');
INSERT 0 1
xxx=> SELECT * FROM z WHERE value->>'a' = '2';
id | value
----+------------
2 | {"a": "2"}
(1 строка)
Теперь положим что в json массив объектов и если в одном из объектов есть определенное текстовое поле, то мне нужна эта строка:
xxx=> DROP TABLE IF EXISTS z;
DROP TABLE
xxx=> CREATE TABLE z (id bigint, value jsonb);
CREATE TABLE
xxx=> INSERT INTO z (id, value) VALUES (1, '{ "b" : [ { "name" : "b1a" }, { "name" : "b1b" }, { "name" : "b1c" } ] }');
INSERT 0 1
xxx=> INSERT INTO z (id, value) VALUES (2, '{ "b" : [ { "name" : "b2a" }, { "name" : "b2b" }, { "name" : "b2c" } ] }');
INSERT 0 1
xxx=> INSERT INTO z (id, value) VALUES (3, '{ "b" : [ { "name" : "b3a" }, { "name" : "b3b" }, { "name" : "b3c" } ] }');
INSERT 0 1
Положим я ищу строку в которой есть json в котором есть массив в котором есть объект с «name» равным «b2b». Что то я туплю, подскажите плиз как должен выглядеть select?