Я думаю, что есть только один ответ на этот вопрос.
ПИТР, или момент времени восстановления. Это в основном архивирование журналов транзакций, и, насколько я знаю, лучший способ сделать резервные копии.
Я пару раз настраивал для 8.1, но в 8.3 он должен быть таким же.
В postgresql.conf все, что вам нужно сделать, это добавить это:
archive_command = 'test ! -f /path/to/your/backups/archive_logs/%f && cp -i %p /path/to/your/backups/archive_logs/%f </dev/null'
Эта команда копирует архивные журналы в указанную директорию, где вы можете безопасно создать резервную копию с помощью выбранного вами программного обеспечения для резервного копирования.
Чтобы сделать полную резервную копию, вам нужно сначала сообщить PostgreSQL, что вы делаете резервную копию.
Это делается с помощью команды psql psql "SELECT pg_start_backup('my_backup');"
После этого просто скопируйте каталог данных с помощью rsync, cpio или другого инструмента. Если база данных интенсивно используется, файлы будут меняться во время копирования, поэтому важно, чтобы инструмент справился с этим правильно и не спасался.
После завершения копирования просто запустите psql "SELECT pg_stop_backup();"
, чтобы сообщить PostgreSQL, что нужно остановить его снова. Что эти команды делают, так это помещают маркер в журналы архива, с которого началось резервное копирование, поэтому при восстановлении он знает, откуда ему нужно начать чтение.
Эту технику также можно использовать для горячего резервирования для репликации, но она не будет читаемой, просто готова к работе в случае чрезвычайной ситуации.
Полный горячий резерв запланирован в версии 8.4, так что до тех пор я не думаю, что есть другой вариант.
Одна вещь, которая хороша, если вы используете PITR, это то, что вы можете указать временную метку, когда вы хотите, чтобы архивные журналы добавлялись. Таким образом, он также может сохранить базу данных от несчастных случаев (например, удаление или изменение некоторых данных)