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 операций, выполняемых как единое целое: либо все успешно, либо ни одна.
Анекдоты по теме
— Как изменить тип колонки в PostgreSQL? — ALTER TABLE orders ALTER COLUMN amount TYPE NUMERIC(15,2); — А если таблица большая? — PostgreSQL перепишет всю таблицу. На время — ACCESS EXCLUSIVE LOCK. — Как сделать без простоя? — Добавить новую колонку, мигрировать данные батчами, переключить приложение, удалить старую.
Начинающий: — Я выучил SQL за неделю! Опытный: — Поздравляю. Ты выучил SELECT, INSERT, UPDATE, DELETE. Осталось лет 5 на JOIN, индексы, транзакции и почему NULL — это зло. Удачи.
DBA объясняет жене: — Дорогая, я как FOREIGN KEY. Я всегда ссылаюсь на тебя — мою PRIMARY KEY. Жена: — А если я удалюсь? DBA: — Тогда я не смогу существовать. Будет ошибка.