JavaRush /Курси /SQL SELF /Робота з типом даних JSONB

Робота з типом даних JSONB

SQL SELF
Рівень 16 , Лекція 1
Відкрита

JSON (JavaScript Object Notation) — це популярний формат даних для обміну інформацією між системами. Він легкий, зрозумілий людині і ідеально підходить для представлення структурованих даних, таких як об'єкти чи масиви.

PostgreSQL підтримує два типи даних для роботи з JSON:

  • JSON: зберігає дані у вигляді рядка. Це чисто текстове представлення JSON, без внутрішньої оптимізації.
  • JSONB: бінарне представлення JSON. Воно ефективніше для читання, фільтрації та обробки, бо PostgreSQL заздалегідь парсить JSON і оптимізує його зберігання.

Чому частіше обирають JSONB? Бо:

  • Він швидший для запитів завдяки бінарному зберіганню.
  • Може індексуватися, що робить його ідеальним для великих наборів даних.
  • Зберігає ключі впорядкованими і прибирає дублікати, що спрощує обробку.

Приклад JSON-структури:

{
  "name": "Alice",
  "age": 25,
  "skills": ["SQL", "PostgreSQL", "JSONB"]
}

Чому JSONB корисний?

Зберігання напівструктурованих даних. У реальному світі дані часто приходять у вигляді складних об'єктів (наприклад, метадані, налаштування, профілі користувачів). JSONB дозволяє зберігати їх, уникаючи створення сотень таблиць і зв'язків.

Моделювання даних, які змінюються. Коли структура об'єкта часто змінюється (наприклад, додаються чи видаляються поля), JSONB дозволяє гнучко зберігати такі дані.

Робота з API. Багато веб-додатків надсилають дані у форматі JSON. Замість перетворення запитів можна зберігати їх "як є" і працювати з ними напряму.

Створення таблиці з JSONB

Давай почнемо з практики! Уяви, що ми створюємо базу даних для зберігання профілів користувачів.

Стовпець profile буде зберігати всю додаткову інформацію (наприклад, вік, інтереси, контакти) у форматі JSON. Це зручно, якщо структура зберігання даних відрізняється у різних користувачів.

id name - VARCHAR(100) profile - JSONB
1 Alice {"age": 25, "skills": ["SQL", "PostgreSQL", "JSONB"], "location": "New York"}
2 Bob {"age": 30, "interests": ["hiking", "photography"], "location": "Denver"}
3 Charlie {"email": "charlie@example.com", "verified": true}
4 Diana {"age": 22, "skills": ["Python"], "bio": "Data enthusiast", "location": "Berlin"}
5 Eve {"age": 28, "skills": [], "preferences": {"theme": "dark", "notifications": false}}

JSON-дані можна вставляти як рядки. PostgreSQL автоматично перетворює їх у формат JSONB.

Витягування даних з JSONB

Тепер, коли у нас є дані, давай дізнаємось, як їх діставати. PostgreSQL дає купу операторів для роботи з JSONB.

Доступ до значення поля

Використовуємо оператор -> для отримання значення поля:

-- Виводимо вік користувача
SELECT profile->'age' AS age FROM users;

Перетворення значення в текст

Оператор ->> дозволяє витягнути значення у вигляді рядка:

-- Виводимо місце проживання користувача
SELECT profile->>'location' AS location FROM users;

Фільтрація даних з JSONB

Справжня сила JSONB розкривається у запитах з фільтрацією. Можна використовувати стандартні SQL-оператори для роботи з JSON.

Приклад фільтрації за ключем:

-- Знайти користувачів, у яких вказано місце проживання "New York"
SELECT * FROM users
WHERE profile->>'location' = 'New York';

Пошук у масиві

JSON підтримує масиви, і PostgreSQL вміє шукати у них значення:

-- Знайти користувачів, які володіють SQL
SELECT * FROM users
WHERE 'SQL' = ANY(jsonb_array_elements_text(profile->'skills'));

Функція jsonb_array_elements_text перетворює елементи масиву у рядки, щоб їх можна було порівнювати.

Є і коротший варіант з оператором @>:

-- Знайти користувачів, які володіють SQL
SELECT * FROM users
WHERE profile->'skills' @> '["SQL"]';

Детальніше про функції та способи роботи з JSON поговоримо пізніше, коли прийде час :P

Коротке резюме: коли використовувати JSONB

JSONB ідеально підходить для:

  • Зберігання складних структурованих даних.
  • Обробки даних з зовнішніх API.
  • Ситуацій, коли структура об'єкта змінюється.

Але не забувай, що надмірне використання JSONB може ускладнити індексацію і керування базою даних. Якщо структура даних стабільна, краще використовувати реляційну модель.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ