Операторы путей: -> ->> @>
Перемещайтесь по документам JSONB с помощью ->, ->>, #>> и проверяйте вхождение с помощью @> и семейства jsonb_path_query
«Операторы путей: -> ->> @>» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Три семейства операторов
Операторы путей JSONB бывают трёх разновидностей:
->и->>— извлечение по ключу или индексу#>и#>>— извлечение по пути@>и?— проверка вхождения или существования ключа
-> возвращает JSONB
Извлеките значение, сохранив его как JSONB:
SELECT data->'user_id' FROM events;
-- returns JSONB like 42
SELECT data->0 FROM events;
-- first element of a JSONB array->> возвращает текст
Извлеките значение как TEXT — это удобно для приведения типа:
SELECT data->>'user_id' FROM events;
-- '42' (TEXT)
SELECT (data->>'user_id')::BIGINT FROM events;
-- 42 (BIGINT)Извлечение по пути #> (JSONB)
Пройдите несколько уровней, передав массив ключей:
SELECT data #> '{user, address, city}' FROM events;
-- nested JSONB valueИзвлечение по пути #>> (TEXT)
То же, что и #>, но результатом будет TEXT:
SELECT data #>> '{user, address, city}' FROM events;
-- 'Berlin'Вхождение @>
«Содержит ли документ этот вложенный документ?» — самый полезный фильтр:
SELECT * FROM events
WHERE data @> '{"type":"login"}';
-- Works for nested matching too:
WHERE data @> '{"user":{"plan":"pro"}}'Существование ключа ?
Проверьте, существует ли ключ на верхнем уровне:
SELECT * FROM events WHERE data ? 'error';
SELECT * FROM events WHERE data ?| ARRAY['a','b']; -- any of these keys
SELECT * FROM events WHERE data ?& ARRAY['a','b']; -- all of these keysЗапросы по путям JSONB (jsonb_path_query)
Современный PostgreSQL поддерживает выражения путей SQL/JSON:
SELECT jsonb_path_query(data, '$.user.tags[*]') FROM events;
SELECT jsonb_path_exists(data, '$.user.tags[*] ? (@ == "admin")') FROM events;Комбинирование с индексами
Индекс GIN ускоряет операции @> и ?:
CREATE INDEX events_data_gin ON events USING GIN (data);
-- supports @>, ?, ?|, ?&
CREATE INDEX events_data_path_gin ON events USING GIN (data jsonb_path_ops);
-- smaller, faster — but only supports @>Запросы к массивам внутри JSONB
Найдите документы, массив которых содержит указанное значение:
SELECT * FROM events
WHERE data->'tags' @> '["admin"]'::JSONB;
-- Or via path query:
SELECT * FROM events
WHERE jsonb_path_exists(data, '$.tags[*] ? (@ == "admin")');Обновление JSONB
Для изменения используйте jsonb_set, || и -:
UPDATE events
SET data = jsonb_set(data, '{user,plan}', '"pro"')
WHERE id = 1;
UPDATE events SET data = data || '{"new_field":true}'::JSONB;
UPDATE events SET data = data - 'old_field';Агрегирование JSONB
Объедините несколько строк в один объект JSONB:
SELECT jsonb_agg(data) FROM events WHERE user_id = 42;
SELECT jsonb_object_agg(name, value) FROM settings;Итоги
Операторы путей позволяют выполнять всё: от извлечения данных до их изменения.
- -> возвращает JSONB, ->> — TEXT
- #> возвращает данные по пути, #>> — текст по пути
- @> проверяет вхождение (поддерживается индексом GIN)
- jsonb_set / || / - используются для обновлений
Быстрая проверка
В чём разница между data->'k' и data->>'k'?
Часто задаваемые вопросы
Урок «Операторы путей: -> ->> @>» бесплатный?
Да — полный текст урока «Операторы путей: -> ->> @>» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Операторы путей: -> ->> @>»?
Перемещайтесь по документам JSONB с помощью ->, ->>, #>> и проверяйте вхождение с помощью @> и семейства jsonb_path_query Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Операторы путей: -> ->> @>»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- JSONB и JSON: когда что использовать
- Операторы путей: -> ->> @>
- Индексация JSONB с помощью GIN
- Моделирование: когда JSONB лучше нормализации