Иногда нужно архивировать старые данные: удалить их из основной таблицы и одновременно сохранить в архиве. Многие делают это двумя запросами (
INSERT => DELETE):DELETE FROM orders
RETURNING *
RETURNING позволяет сразу вернуть удалённые строки как результирующий набор, не выполняя повторный SELECT.WITH moved AS (...)
CTE превращает результат удаления во временный набор данных, который можно использовать в следующей операции:INSERT INTO orders_archive
SELECT * FROM moved;
В итоге строки удаляются и архивируются одним атомарным запросом, без повторного чтения таблицы.
🔥 Полезный паттерн для архивирования, миграций, дедупликации и batch-операций над большими таблицами.
➡️ SQL Ready | #совет
