Я заинтересован в том, чтобы вести историю всех изменений, произошедших с некоторыми таблицами в моей базе данных, чтобы иметь возможность реконструировать исторические состояния базы данных для целей анализа.
Я использую Postgres, и эта вещь MVCC, похоже, должна быть в состоянии использовать ее для этой цели, но я не могу найти какую-либо документацию для поддержки этого. Могу ли я это сделать? Есть ли лучший способ?
Любой вклад приветствуется!
UPD
Я пометил ответ Дениса как ответ, потому что он действительно ответил, является ли MVCC тем, что я хочу, и это был вопрос. Однако стратегия, на которой я остановился, подробно описана ниже на случай, если кто-нибудь найдет ее полезной:
Функция Postgres, которая делает то, что я хочу: онлайн-резервное копирование / восстановление во времени.
http://www.postgresql.org/docs/8.1/static/backup-online.html объясняет, как использовать эту функцию, но, по сути, вы можете установить этот «журнал предварительной записи» в режим архивирования, сделать снимок базы данных (скажем, до ее запуска), а затем постоянно архивировать WAL , После этого вы можете в любое время использовать воспроизведение журнала, чтобы в любой момент вызывать состояние базы данных, и при желании вы получите теплый резерв (непрерывное воспроизведение новых WAL на резервном сервере).
Возможно, этот метод не так элегантен, как другие способы ведения истории, так как вам нужно создать базу данных для каждого момента времени, когда вы хотите выполнить запрос, однако он выглядит чрезвычайно простым в настройке и теряет ноль информации. Это означает, что когда у меня будет время улучшить свою обработку исторических данных, у меня будет все и, следовательно, я смогу преобразовать свою неуклюжую систему в более элегантную систему.
Один ключевой факт, который делает это настолько совершенным, заключается в том, что мое «действительное время» совпадает с моим «временем транзакции» для конкретного приложения - если бы это было не так, я бы только фиксировал «время транзакции».
До того, как я узнал о WAL, я думал о том, чтобы делать ежедневные снимки или что-то в этом роде, но требование большого размера и потеря данных меня не устраивали.
Для быстрого запуска и запуска без ущерба для хранения моих данных с самого начала это выглядит как идеальное решение.