pilot_name |
sports
------------+----------------------------------
Ivan
| ["футбол", "плавание"]
Boris
| ["футбол", "плавание", "теннис"]
(2 строки)
В этом решении мы выводим только информацию о спортивных предпочтениях пи-
лотов. Внимательно посмотрите, как используются одинарные и двойные кавычки.
Операция «
−
>
» служит для обращения к конкретному ключу JSON-объекта.
При создании столбца с типом данных json или jsonb не требуется задавать структу-
ру объектов, т. е. конкретные имена ключей. Поэтому в принципе возможна ситуа-
ция, когда в разных строках в JSON-объектах будут использоваться различные набо-
ры ключей. В нашем примере структуры JSON-объектов во всех строках совпадают. А
если бы они не совпадали, то как можно было бы проверить наличие ключа? Проде-
монстрируем это.
Ключа «sport» в наших объектах нет. Что покажет вызов функции count?
SELECT count( * )
FROM pilot_hobbies
WHERE hobbies ? 'sport';
count
-------
0
(1 строка)
А вот ключ «sports» присутствует. Выполним ту же проверку:
SELECT count( * )
FROM pilot_hobbies
WHERE hobbies ? 'sports';
Да, так и есть. Такие записи найдены.
count
-------
4
(1 строка)
А как выполнять обновление JSON-объектов в строках таблицы? Предположим, что
пилот по имени Boris решил посвятить себя только хоккею. Тогда в базе данных мы
выполним такую операцию:
UPDATE pilot_hobbies
SET hobbies = hobbies || '{ "sports": [ "хоккей" ] }'
WHERE pilot_name = 'Boris';
UPDATE 1
Проверим, что получилось:
Достарыңызбен бөлісу: