Перейти до основного вмісту
Модуль 15 · Урок 1 із 256/57 у курсі~15 min
Модульні уроки (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 «метаданих»:

SQL
-- 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;
вправи#sql.m15.l1.e1
Спроби: 0Завантаження…

Давайте запитувати JSON на льоту. Спроектуйте цей json-літерал \`'{"user": {"name": "Mario"}}'::json\` і використовуйте оператор \`->\` у поєднанні з текстовою версією (\`->>\`), щоб отримати 'name', назвавши вилучений стовпець 'user_name'.

Завантаження редактора…
Показати підказку

Переведіть на ::json або ::jsonb і використовуйте ->'user'->>'name'.

Рішення доступне після 3 спроб

вправи#sql.m15.l1.e2
Спроби: 0Завантаження…

Що, якщо ми передамо масив? Доступ до масиву в json_b у Postgres працює за INDEX (від нуля). Витягніть ДРУГИЙ елемент як текст із \`'["A", "B", "C"]'::json\` і назвіть його 'літера'.

Завантаження редактора…
Показати підказку

->>1 (відраховується від нуля!)

Рішення доступне після 3 спроб