0Pricing
SQL Academy · Урок

Операторы путей: -> ->> @>

Перемещайтесь по документам 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 — локальная установка не требуется.

Все уроки этого курса

  1. JSONB и JSON: когда что использовать
  2. Операторы путей: -> ->> @>
  3. Индексация JSONB с помощью GIN
  4. Моделирование: когда JSONB лучше нормализации
← Назад к SQL Academy