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;
Связанные термины
Анекдоты по теме
— Что такое SQL тремя словами? — Спроси у таблицы. — А если сложнее? — Дай мне данные. — А если ещё сложнее? — Соедини эти две таблицы аккуратно.
— Как хранить деньги в базе данных? — DECIMAL(19,4) или NUMERIC(19,4). — Почему не FLOAT? — Потому что FLOAT неточный. 0.1 + 0.2 = 0.30000000000000004. — В банке это было бы проблемой. — Именно.
— Можно ли использовать CTE для UPDATE? — Да: WITH to_update AS ( SELECT id FROM orders WHERE status = 'pending' AND created_at < NOW() - INTERVAL '7 days' ) UPDATE orders SET status = 'expired' WHERE id IN (SELECT id FROM to_update); — Читаемо! — И безопасно — сначала видишь что будет обновлено.