Обычно изменения и чтение делают разными запросами, что создаёт лишние
round-trip и риск рассинхронизации данных между операциями:UPDATE orders
SET status = 'processing'
WHERE id = 123
RETURNING *;
RETURNING уже даёт доступ к изменённым строкам, но data-modifying CTE позволяет пойти дальше и использовать их в следующих шагах:WITH updated AS (...)
CTE фиксирует результат изменения и гарантирует, что последующие операции работают с тем же набором строк в рамках одного statement:INSERT INTO audit_log (order_id, new_status)
SELECT id, status
FROM updated;
Теперь можно атомарно обновить данные и сразу записать аудит, отправить в очередь или выполнить дополнительную логику без повторных
SELECT.🔥
data-modifying CTE — это способ строить сложные, но безопасные цепочки операций внутри одного SQL-запроса.➡️ SQL Ready | #совет
