PostgreSQLСредний
RETURNING
Возвращает строки после INSERT, UPDATE или DELETE без дополнительного SELECT.
Синтаксис
INSERT INTO table (...) VALUES (...) RETURNING id;
UPDATE table SET ... WHERE ... RETURNING *;
DELETE FROM table WHERE ... RETURNING id;Объяснение
RETURNING позволяет получить данные изменённых строк в одном запросе вместо двух (изменение + SELECT).
Особенно полезно для получения auto-generated id после INSERT.
Пример
-- Получить id после вставки
INSERT INTO orders (user_id, total)
VALUES (1, 999)
RETURNING id, created_at;
-- Обновить и получить обновлённые строки
UPDATE users SET last_seen = NOW()
WHERE id = ANY($1)
RETURNING id, last_seen;Связанные термины
CREATE TABLEСоздаёт новую таблицу с определёнными колонками и ограничениями.DELETEУдаляет строки из таблицы, подходящие под условие WHERE.INSERTДобавляет новые строки в таблицу.UPDATEИзменяет значения в существующих строках таблицы.UPSERT (ON CONFLICT)Вставляет строку или обновляет её при конфликте уникального ключа. Атомарная операция.Транзакция (TRANSACTION)Группа SQL операций, выполняемых как единое целое: либо все успешно, либо ни одна.
Анекдоты по теме
— Почему SELECT DISTINCT такой гордый? — Потому что он убирает повторы. В жизни так не умеют.
— В чём разница между DROP и DELETE? DELETE удаляет строки, но таблица остаётся. DROP удаляет саму таблицу. Как дом: DELETE — вынести мебель, DROP — снести дом вместе с фундаментом.
— Почему timestamp without time zone опасен? — Хранит время без информации о часовом поясе. — Проблема? — Сервер в UTC, приложение в Moscow, пользователь в Vladivostok. База хранит 10:00 — но это 10:00 где? — Решение? — TIMESTAMPTZ (timestamp with time zone). Хранит UTC, отображает в нужной зоне.