Как работает версионность со временными таблицами Postgres?

Версионность со временными таблицами в PostgreSQL обеспечивает возможность отслеживать и сохранять изменения в таблицах на протяжении определенного времени. Введена в версии 9.1, эта функциональность полезна для аудита данных, создания истории изменений, выполнения временных вычислений и других сценариев.

Версионность со временными таблицами работает на основе одной или нескольких основных таблиц, которые называются "ведущими таблицами", и одной или нескольких временных таблиц, называемых "следящими таблицами". Ведущие таблицы служат источником данных, которые следуется отслеживать, пока следящие таблицы хранят изменения, сделанные в ведущих таблицах.

Когда установлена версионность со временными таблицами для ведущей таблицы, автоматически создается следящая таблица, которая имеет ту же структуру, что и ведущая таблица, и синхронизируется с ее текущим состоянием.

Когда происходит изменение данных в ведущей таблице, PostgreSQL автоматически фиксирует изменения в следящей таблице. По умолчанию, для каждой операции обновления, вставки и удаления, создается новая версия записи в следящей таблице. Каждая версия содержит информацию о времени изменения и содержимом измененных столбцов.

Версии записей хранятся вместе с текущим состоянием ведущей таблицы. Это позволяет выполнять запросы, которые включают обновления и выборку данных из разных версий, а также предоставляет возможность откатиться к предыдущим состояниям таблицы.

Для доступа к данным версионных таблиц используются специальные SQL-конструкции, такие как AS OF и BETWEEN, которые позволяют выбирать данные, как если бы они находились в состоянии на определенный момент времени или в интервале времени.

Версионность со временными таблицами также поддерживает индексы, ограничения целостности и триггеры на ведущих таблицах и следящих таблицах. При выполнении операции индексов или триггеров, PostgreSQL автоматически обрабатывает связанные следящие таблицы, чтобы отражать изменения в данных.

Хотя версионность со временными таблицами предоставляет мощную функциональность для отслеживания изменений данных, она также может занимать больше места на диске и при выполнении операций записи, поскольку выполняются дополнительные операции по сохранению изменений. Поэтому перед включением версионности со временными таблицами в проект необходимо учитывать эти факторы.