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;
Связанные термины
Анекдоты по теме
Разработчик спрашивает: — Как скопировать таблицу? DBA: — CREATE TABLE new_table AS SELECT * FROM old_table; — А со структурой но без данных? DBA: — CREATE TABLE new_table AS SELECT * FROM old_table WHERE 1=0; — Изящно. DBA: — WHERE 1=0 никогда не истина. Ноль строк.
Почему GROUP BY не зовут на дни рождения? Потому что он всех складывает в кучу и выдаёт по одному подарку на группу.
— Зачем нужен RETURNING в PostgreSQL? — INSERT INTO users (name) VALUES ('Иван') RETURNING id; Возвращает id только что вставленной строки без дополнительного SELECT. — Удобно! — И для UPDATE: UPDATE users SET name='Пётр' WHERE id=1 RETURNING *;