Машина времени для СУБД
Машина времени для СУБД Представьте ситуацию: из таблицы БД пропала важная запись. Коллеги твердят: "Её никогда не было"! Но Вы-то знаете, что она была! Если бы только существовала машина времени для баз данных... Ретроспективные запросы (Temporal Queries) — это и есть такая машина времени. Это способ заглянуть в прошлое таблицы и увидеть, как выглядели данные в конкретный момент. В мире, где данные меняются каждую секунду (переводы, смены статусов, обновления профилей), это незаменимая вещь для аудита, анализа и отладки. Посмотрим как это работает на примере MS SQL Server и PostgreSQL. В MS SQL Server эта фича называется System-Versioned Temporal Tables. Создаёте таблицу с двумя скрытыми колонками (ValidFrom и ValidTo), и СУБД автоматически сохраняет историю каждого изменения. В ванильном PostgreSQL нет нативной поддержки Temporal Queries на уровне базовой функциональности СУБД. Но это легко реализуется с помощью расширения pg_temporal. Допустим, клиент утверждает, что ему вчера одобрили скидку 20%, а сегодня в системе стоит 10%. Чтобы узнать правду, используем FOR SYSTEM_TIME AS OF: ```sql -- Узнаём статус заказа номер 12345 ровно на вчерашний полдень SELECT OrderID, CustomerName, Discount, ValidFrom, ValidTo FROM Orders FOR SYSTEM_TIME AS OF '2026-07-11 12:00:00' WHERE OrderID = 12345; ``` И вот мы видим данные ровно на тот момент. Истина будет неизбежно восстановлена! Ретроспективные запросы — это не просто «прикольная фича», а насущная необходимость. Это способ: · Проводить аудит без костылей и записей в логах. · Анализировать тренды и видеть эволюцию данных. · Возвращаться к состоянию на любой момент времени без поднятия бэкапа. Так что в следующий раз, когда кто-то скажет Вам: "Этих данных никогда не было", просто отправьте ему ретроспективный запрос. Данные не врут!