Загрузка дампа в БД: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
Новая страница: «Восстановление в новую базу: <pre> createdb \ -h IP_SERV_POSTR \ -p 5432 \ -U postgres \ reg_NAME_BD pg_restore \ -h IP_SERV_POSTR \ -p 5432 \ -U postgres \ -d NAME_BD_test \ --no-owner \ --exit-on-error \ /PATH_DUMP/NAME_FILE_DUMP </pre> После восстановления проверить подключение: <pre>psql \ -h 172.16.130.11 \ -p 5432 \ -U postgres \</pre>»
 
Нет описания правки
 
(не показаны 2 промежуточные версии этого же участника)
Строка 2: Строка 2:
<pre>
<pre>
createdb \
createdb \
   -h IP_SERV_POSTR \
   -h IP_SERV_POSTGR \
   -p 5432 \
   -p 5432 \
   -U postgres \
   -U postgres \
   reg_NAME_BD
   -T template0 \
 
  NAME_BD_test
pg_restore \
</pre>
   -h IP_SERV_POSTR \
template0 создаёт действительно чистую базу без дополнительных объектов из template1
<pre>pg_restore \
   -h IP_SERV_POSTGR \
   -p 5432 \
   -p 5432 \
   -U postgres \
   -U postgres \
   -d NAME_BD_test \
   -d NAME_BD_test \
   --no-owner \
   --no-owner \
  --no-privileges \
   --exit-on-error \
   --exit-on-error \
   /PATH_DUMP/NAME_FILE_DUMP
   --single-transaction \
  "/PATH_DUMP/NAME_FILE_DUMP.dump"
</pre>
Назначение параметров:
*--no-owner не пытается назначить владельцев с исходного сервера;
*--no-privileges не восстанавливает права старых ролей;
*--exit-on-error прекращает работу при первой ошибке;
*--single-transaction откатывает восстановление целиком при ошибке.
 
После этого права прикладному пользователю нужно выдать заново.
 
Дамп отдельных таблиц
 
Команда с -t синтаксически правильная, но описание неполное. Выбор отдельных таблиц не гарантирует включение всех зависимостей:
 
*пользовательских типов;
*функций;
*связанных таблиц;
*внешних ключей;
*необходимых последовательностей и других объектов.
 
Для переноса всей прикладной схемы надёжнее:
 
<pre>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"
</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 172.16.130.11 \
   -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();"