PostgreSQL вміє "розмовляти" не тільки на SQL! Знайомся: PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language), процедурна мова програмування, яка вбудована в PostgreSQL. Вона створена для спрощення виконання складних операцій із використанням SQL-запитів і структур керування, таких як умови (IF, CASE) і цикли (LOOP, FOR, WHILE).
PL/pgSQL і SQL — це як автоматизована збірочна лінія і звичайний "ручний" інструмент типу молотка. Як і молоток, SQL — інструмент надійний. Але для кожного удару треба замахуватись і робити його вручну. А PL/pgSQL — це вже автоматична збірочна лінія: ти один раз задаєш, що і як треба робити, а далі все працює само — виконує команди, запам’ятовує, перевіряє, якщо щось пішло не так, і спокійно продовжує далі. Навіщо самому забивати кожен цвях, якщо можна просто спостерігати, як все робиться само? Ну хіба не мрія?
Порівняння PL/pgSQL із звичайними SQL-запитами
Давай розберемося, чим PL/pgSQL відрізняється від простих SQL-запитів.
SQL працює чудово, коли тобі треба виконати одну конкретну задачу: наприклад, вибрати всіх студентів із таблиці або додати новий рядок. Але як тільки ти стикаєшся з логікою "якщо це, то те" або з необхідністю повторювати ті ж дії, у SQL починаються проблеми.
Наприклад, уяви, що тобі треба:
- Перевірити, чи вже є запис про студента в таблиці.
- Якщо запис є — оновити дані.
- Якщо запису немає — додати новий запис.
За допомогою звичайного SQL тобі довелося б написати кілька запитів і обробляти результат на стороні клієнта. З PL/pgSQL все це можна вмістити в одну процедуру, яка виконується на стороні бази даних.
PL/pgSQL чудово себе показує в більш комплексних проєктах. Він дозволяє:
- зберігати проміжні результати у змінні;
- обробляти помилки, щоб база даних не "падала" при несподіванках;
- використовувати цикли та умови для виконання складних алгоритмів.
Області застосування PL/pgSQL
Застосування PL/pgSQL дуже часто зустрічається в таких сценаріях:
Автоматизація задач. Наприклад, автоматичне створення записів у журналі (
log) при кожному оновленні даних.Бізнес-логіка. У тебе є правило: кожен студент, у якого більше 5 пропусків, має автоматично позначатися як "неактивний". Чому б не покласти це правило у функцію PL/pgSQL?
Аналітика та звіти. Замість того щоб ганяти дані між базою даних і клієнтським застосунком, ти можеш агрегувати їх на стороні сервера.
Тригери. PL/pgSQL використовується для написання тригерів, які автоматично виконують дії при вставці, оновленні або видаленні даних.
Приклад використання PL/pgSQL
Ось приклад функції, яка приймає два числа, додає їх і повертає результат:
CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
RETURN a + b;
END;
$$ LANGUAGE plpgsql;
Пояснення:
CREATE FUNCTION add_numbers(a INT, b INT)— ми створюємо функцію з іменемadd_numbers, яка приймає два аргументи типуINT(ціле число).RETURNS INT— вказує, що функція повертає ціле число.BEGIN ... END— це основний блок інструкції, де виконується логіка функції.RETURN a + b;— результат додавання повертається назад.
Щоб викликати цю функцію, треба використати звичайний SQL-запит:
SELECT add_numbers(10, 20);
Результат: 30.
Підводні камені та обмеження
PL/pgSQL — потужний інструмент, але з ним треба бути обережним:
- Продуктивність: занадто складні функції можуть сповільнити роботу бази. Завжди тестуй і оптимізуй.
- Тестування: помилки у функціях можуть бути непомітні, поки ти їх не викличеш. Не забувай про тести!
- Читабельність: великі функції та процедури зі складною логікою можуть бути важкими для розуміння. Намагайся писати код, який ти зможеш зрозуміти через місяць.
Тепер, коли ти вже трохи знаєш, що таке PL/pgSQL, поговоримо далі про його синтаксис і основні можливості. Ми навчимося створювати блоки коду, оголошувати змінні та працювати з типами даних у наступних лекціях. Вперед до програмування на стороні бази даних!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ