Модульні уроки (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 (від нуля). Витягніть ДРУГИЙ елемент як текст із \`'["A", "B", "C"]'::json\` і назвіть його 'літера'.
Показати підказку
->>1 (відраховується від нуля!)
Рішення доступне після 3 спроб