Уроки модуля (1/2)
Интеграция JSON и JSONB
Интеграция JSON и JSONB
PostgreSQL переписал правила работы с базами данных, объединив обнадеживающую, надежную природу ACID SQL с динамической, гибкой гибкостью, типичной для NoSQL. Это было сделано путем предложения столбцов, изначально предназначенных для хранения данных JSON.
Внимание: в Postgres почти всегда рекомендуется использовать JSONB. «B» означает «двоичный»: документы JSON, хранящиеся в этих столбцах, теряют свое чисто текстовое форматирование, но получают возможность проверяться, запрашиваться с очень высокой производительностью, манипулироваться и даже индексироваться с помощью классического B-дерева или GIN INDEX.
Навигация по JSON: оператор «Стрелка»
К сожалению, база данных ecommerce в настоящее время не имеет предопределенных столбцов чистого JSON. Однако мы можем создавать временные значения JSON и «выводить» их из текста!
При работе с JSON операторами, которые детализируют объекты и массивы, являются -> (сохраняет данные в чистом виде jsonb/json) или его «расширенная» версия ->> (преобразует обнаруженные данные JSON в текст).
Академический пример, как если бы существовал столбец JSON «метаданные»:
-- Look up the value associated with the info key
SELECT metadata->'info' FROM users;
-- Drill into info, and grab city as text
SELECT metadata->'info'->>'city' FROM users;Давайте запросим JSON на лету. Спроецируйте этот json-литерал \`'{"user": {"name": "Mario"}}'::json\` и используйте оператор \`->\` в сочетании с текстовой версией (\`->>\`), чтобы извлечь 'name', назвав извлеченный столбец 'user_name'.
Показать подсказку
Приведите к ::json или ::jsonb и используйте ->'user'->>'name'.
Решение доступно после 3 попыток
Что, если мы передадим массив? Доступ к массиву в json_b в Postgres работает по INDEX (отсчет от нуля). Извлеките элемент SECOND как текст из \`'["A", "B", "C"]'::json\` и назовите его "буква".
Показать подсказку
->>1 (отсчитывается от нуля!)
Решение доступно после 3 попыток