Сьогодні трохи поговоримо про масиви — один із потужних інструментів PostgreSQL, який дозволяє зберігати список значень одного типу всередині одного стовпця. Детальніше ми розглянемо масиви на наступних рівнях.
Коли кажуть "масиви", одразу згадуються списки. Згадай, як ти записуєш список покупок перед походом у магазин: яблука, банани, молоко, хліб. У PostgreSQL масив — це аналог такого списку, де можна зберігати кілька значень в одному полі, причому кожне значення належить до одного й того ж типу даних. Наприклад, масив чисел, масив текстів, масив дат і т.д.
Наводимо кілька прикладів.
Масив чисел:
{1, 2, 3, 4}
Масив рядків:
{"apple", "banana", "cherry"}
Масив дат:
{2024-10-01, 2024-10-02, 2024-10-03}
Масив дозволяє записувати багато значень в одне поле, економлячи місце в таблиці та підвищуючи гнучкість запитів.
Навіщо потрібні масиви? Основні переваги
Компактне зберігання даних: зберігання кількох значень в одному полі. Це особливо зручно для даних, які логічно пов’язані між собою. Наприклад, список тегів для статті або список оцінок студента. Створювати окрему таблицю для пари тегів?
Зручність вибірки: масиви дозволяють отримувати одразу цілий список значень з одного поля, а також легко маніпулювати окремими елементами масиву.
Продуктивність: у деяких сценаріях масиви дозволяють уникнути створення додаткових таблиць для пов’язаних даних, що може спростити архітектуру бази та пришвидшити розробку. Що не може не тішити.
Як працювати з масивами в PostgreSQL?
Створення масиву в SELECT
Для задання масиву можна використовувати конструктор ARRAY[]. Ось приклад:
-- Приклад масиву чисел
SELECT ARRAY[1, 2, 3, 4];
-- Приклад масиву рядків
SELECT ARRAY['apple', 'banana', 'cherry'];
Занадто просто. Давай створимо таблицю і спробуємо щось у ній вибрати.
Створення таблиці з масивами
Для початку створимо таблицю, де один зі стовпців буде масивом.
| id | name - VARCHAR(50) | subjects - TEXT[] |
|---|---|---|
| 1 | Alex | {Математика,Фізика} |
| 2 | Maria | {Хімія,Біологія,Англійська} |
| 3 | Peter | {Інформатика} |
Подивимось, що у нас вийшло:
SELECT * FROM students;
| id | name | subjects |
|---|---|---|
| 1 | Alex | {Математика,Фізика} |
| 2 | Maria | {Хімія,Біологія,Англійська} |
| 3 | Peter | {Інформатика} |
Витяг даних з масивів
Для витягу даних з масиву PostgreSQL дає кілька функцій і операторів.
Витяг елемента масиву
Щоб отримати елемент масиву за його індексом, використовуються квадратні дужки []. Зверни увагу, що нумерація починається з 1 (а не з 0, як у більшості мов програмування).
-- Отримуємо перший предмет у кожного студента
SELECT name, subjects[1] AS перший_предмет FROM students;
І ось такий результат:
| name | перший_предмет |
|---|---|
| Alex | Математика |
| Maria | Хімія |
| Peter | Інформатика |
Витяг всього рядка масиву
Для отримання всіх елементів масиву використовується звичайний SELECT:
SELECT name, subjects FROM students;
Пошук значень всередині масиву
Іноді треба визначити, чи містить масив конкретне значення. Для цього використовується оператор ANY.
-- Вибрати студентів, які вивчають "Математику"
SELECT name
FROM students
WHERE 'Математика' = ANY(subjects);
Результат запиту:
| name |
|---|
| Alex |
У PostgresQL є дуже багато функцій і операторів для роботи з масивами, але про них ти дізнаєшся на майбутніх рівнях :P
Типові помилки при роботі з масивами
Плутанина з індексацією 0 і 1.
У PostgreSQL індексація масиву починається з 1. Якщо ти звик до мов типу Python чи JavaScript, це може заплутати.
Порожні масиви.
Порожній масив {} і NULL — це різні речі в PostgreSQL. Якщо ти порівнюєш масиви, не плутай ці поняття.
Робота з великими масивами.
Зберігання величезної кількості даних у масиві може збільшити час обробки запитів. Використовуй масиви для невеликих обсягів даних.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ