Сьогодні ми додамо ще одну магічну фішку до наших знань: команду RETURNING. Це потужний інструмент, який дозволяє одразу отримати потрібні дані назад після вставки, оновлення або видалення. А тепер уяви, що ти вставляєш рядок у таблицю і одразу отримуєш його унікальний ідентифікатор. Зручно? Авжеж! Давай вчитись!
Після виконання операцій INSERT, UPDATE або DELETE іноді виникає потреба одразу отримати дані, які були зачеплені. Наприклад, після вставки нового рядка в таблицю нам треба знати його автоматично створений первинний ключ (унікальний ідентифікатор). Замість того, щоб відправляти окремий запит на отримання цих даних, ми можемо зробити це одразу під час виконання операції за допомогою RETURNING.
Припустимо, ти додаєш нового студента в таблицю students. У кожного студента є унікальний ідентифікатор (скажімо, student_id), який генерується автоматично. Після додавання нового запису ти хочеш одразу використати цей ідентифікатор для записів студента на курс. Без RETURNING тобі довелось би спочатку додати студента, потім зробити окремий запит SELECT, щоб знайти його ідентифікатор. З RETURNING все робиться одним запитом!
Синтаксис команди RETURNING
Команда RETURNING додається в кінець операцій INSERT, UPDATE і DELETE. Ось загальний синтаксис:
-- INSERT синтаксис:
INSERT INTO таблиця (column1, column2, ...)
VALUES (value1, value2, ...)
RETURNING колонка;
-- UPDATE синтаксис:
UPDATE таблиця
SET column1 = value1
WHERE умова
RETURNING колонка;
-- DELETE синтаксис:
DELETE FROM таблиця
WHERE умова
RETURNING колонка;
RETURNING дозволяє вказати, які стовпці з змінених рядків ти хочеш повернути. Це може бути один конкретний стовпець (наприклад, первинний ключ) або одразу кілька стовпців.
Використання RETURNING з INSERT
Розглянемо приклад таблиці students:
CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
email TEXT UNIQUE
);
Додаємо нового студента і одразу отримуємо його ідентифікатор:
INSERT INTO students (first_name, last_name, email)
VALUES ('Otto', 'Lin', 'otto.lin@example.com')
RETURNING student_id;
Запит поверне ідентифікатор доданого студента:
| student_id |
|---|
| 1 |
Ти щойно додав студента Otto Lin, і PostgreSQL одразу повідомив тобі його student_id. Зручно? Ще й як!
А тепер давай вставимо і одразу отримаємо кілька стовпців. Якщо тобі потрібні не тільки student_id, а й інші дані, наприклад, ім'я та прізвище студента, ти можеш запросити їх через RETURNING:
INSERT INTO students (first_name, last_name, email)
VALUES ('Alex', 'Ming', 'alex.ming@example.com')
RETURNING student_id, first_name, last_name;
Результат:
| student_id | first_name | last_name |
|---|---|---|
| 2 | Alex | Ming |
Використання RETURNING з UPDATE
Іноді після оновлення даних треба дізнатись, які саме рядки були змінені. RETURNING чудово справляється з цим завданням.
Уяви, що студент Otto Lin вирішив змінити свій email. Оновимо його дані і одразу отримаємо інформацію про змінений рядок:
UPDATE students
SET email = 'lin.new@example.com'
WHERE student_id = 1
RETURNING student_id, email;
Результат:
| student_id | |
|---|---|
| 1 | lin.new@example.com |
Тепер ти точно знаєш, що email студента з student_id = 1 був успішно оновлений.
Використання RETURNING з DELETE
Коли ти видаляєш записи з таблиці, буває корисно знати, які рядки були видалені. З RETURNING ти можеш отримати дані видалених рядків.
Ось приклад. Припустимо, що студент Peter Ming був відрахований. Видалимо його з таблиці і отримаємо інформацію про його видалення:
DELETE FROM students
WHERE student_id = 2
RETURNING student_id, first_name, last_name;
Результат:
| student_id | first_name | last_name |
|---|---|---|
| 2 | Peter | Ming |
Тепер ти впевнений, що саме Peter Ming був видалений.
Практичні поради
Використовуй RETURNING завжди, коли тобі потрібні дані змінених рядків. Це дозволяє уникати зайвих запитів до бази даних.
Мінімізуй кількість повернутих даних. Якщо тобі потрібен тільки первинний ключ, запитуй лише його.
У комбінації з транзакціями RETURNING стає особливо потужним. Наприклад, ти можеш додавати дані в кілька пов'язаних таблиць, передаючи ідентифікатори за допомогою RETURNING.
Типові помилки при використанні RETURNING
Часто новачки стикаються з тим, що забувають: RETURNING працює тільки з зміненими рядками. Наприклад, якщо запит UPDATE або DELETE не знайшов жодного рядка, RETURNING поверне порожній результат. Не лякайся, це нормально. Просто переконайся, що твій запит коректний, або оброби цей випадок у коді застосунку.
І ще одна поширена помилка: спроба використовувати RETURNING для неіснуючих стовпців. Обов'язково переконайся, що всі запитані стовпці існують у твоїй таблиці.
Тепер ти знаєш, як за допомогою RETURNING можна суттєво спростити роботу з даними. Це один із тих інструментів, які ти точно оцінуєш при створенні реальних застосунків. Вперед до нових горизонтів!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ