JavaRush /Курси /SQL SELF /Знайомство з PL/pgSQL

Знайомство з PL/pgSQL

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

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 починаються проблеми.

Наприклад, уяви, що тобі треба:

  1. Перевірити, чи вже є запис про студента в таблиці.
  2. Якщо запис є — оновити дані.
  3. Якщо запису немає — додати новий запис.

За допомогою звичайного SQL тобі довелося б написати кілька запитів і обробляти результат на стороні клієнта. З PL/pgSQL все це можна вмістити в одну процедуру, яка виконується на стороні бази даних.

PL/pgSQL чудово себе показує в більш комплексних проєктах. Він дозволяє:

  • зберігати проміжні результати у змінні;
  • обробляти помилки, щоб база даних не "падала" при несподіванках;
  • використовувати цикли та умови для виконання складних алгоритмів.

Області застосування PL/pgSQL

Застосування PL/pgSQL дуже часто зустрічається в таких сценаріях:

  1. Автоматизація задач. Наприклад, автоматичне створення записів у журналі (log) при кожному оновленні даних.

  2. Бізнес-логіка. У тебе є правило: кожен студент, у якого більше 5 пропусків, має автоматично позначатися як "неактивний". Чому б не покласти це правило у функцію PL/pgSQL?

  3. Аналітика та звіти. Замість того щоб ганяти дані між базою даних і клієнтським застосунком, ти можеш агрегувати їх на стороні сервера.

  4. Тригери. 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, поговоримо далі про його синтаксис і основні можливості. Ми навчимося створювати блоки коду, оголошувати змінні та працювати з типами даних у наступних лекціях. Вперед до програмування на стороні бази даних!

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