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