Загрузка дампа в БД
Восстановление в новую базу:
createdb \ -h IP_SERV_POSTGR \ -p 5432 \ -U postgres \ -T template0 \ NAME_BD_test
template0 создаёт действительно чистую базу без дополнительных объектов из template1
pg_restore \ -h IP_SERV_POSTGR \ -p 5432 \ -U postgres \ -d NAME_BD_test \ --no-owner \ --no-privileges \ --exit-on-error \ --single-transaction \ "/PATH_DUMP/NAME_FILE_DUMP.dump"
Назначение параметров:
- --no-owner не пытается назначить владельцев с исходного сервера;
- --no-privileges не восстанавливает права старых ролей;
- --exit-on-error прекращает работу при первой ошибке;
- --single-transaction откатывает восстановление целиком при ошибке.
После этого права прикладному пользователю нужно выдать заново.
Дамп отдельных таблиц
Команда с -t синтаксически правильная, но описание неполное. Выбор отдельных таблиц не гарантирует включение всех зависимостей:
- пользовательских типов;
- функций;
- связанных таблиц;
- внешних ключей;
- необходимых последовательностей и других объектов.
Для переноса всей прикладной схемы надёжнее:
pg_dump \ -h IP_SERV_POSTGR \ -p 5432 \ -U postgres \ -d NAME_BD \ -Fc \ --no-owner \ --no-privileges \ -n main \ -f "/PATH_DUMP/main.dump"
Безопасность
Дамп содержит персональные и медицинские данные. Желательно добавить:
chmod 700 ~/postgre/dump chmod 600 "/PATH_DUMP/NAME_FILE_DUMP.dump"
Также лучше:
- не использовать postgres для регулярного резервного копирования;
- создать отдельную роль только для резервного копирования;
- шифровать дамп при хранении и передаче;
- рассчитывать контрольную сумму:
sha256sum "/PATH_DUMP/NAME_FILE_DUMP.dump" \ > "/PATH_DUMP/NAME_FILE_DUMP.dump.sha256"
Главная проверка резервной копии заключается не в pg_restore --list, а в периодическом тестовом восстановлении в отдельную базу и проверке данных. --list подтверждает только то, что каталог архива читается.
После восстановления проверить подключение:
psql \ -h IP_SERV_POSTGR \ -p 5432 \ -U postgres \ -d NAME_BD_test \ -c "SELECT current_database(), version();"