Создание дампа БД: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 13: Строка 13:


Проверьте подключение:
Проверьте подключение:
<pre>psql -h IP_SERV_POSTGR -p 5432 -U postgres -d reg_svo -c "SELECT current_database(), version();"</pre>
<pre>psql -h IP_SERV_POSTGR -p 5432 -U postgres -d NAME_BD -c "SELECT current_database(), version();"</pre>


Создайте дамп в рекомендуемом custom-формате:
Создайте дамп в рекомендуемом custom-формате:
Строка 23: Строка 23:
   -Fc \
   -Fc \
   --no-owner \
   --no-owner \
   -f /PATH_DUMP/NAME_DUMP_$(date +%F).dump
  --no-privileges \
   -f "/PATH_DUMP/NAME_DUMP_$(date +%F).dump"
</pre>
</pre>
Если надо сделать дамп только нужных таблиц. Используйте параметр -t для каждой таблицы:
Если надо сделать дамп только нужных таблиц. Используйте параметр -t для каждой таблицы:
Строка 37: Строка 38:
   -t 'main.tabl3' \
   -t 'main.tabl3' \
   -f /PATH_DUMP/FILE.dump
   -f /PATH_DUMP/FILE.dump
</pre>
Плюсы:
*используется custom-формат;
*архив проверяется через pg_restore --list;
*пароль вынесен в .pgpass;
*права .pgpass установлены в 600;
*--no-owner упрощает перенос между серверами.
Но есть нюансы.
*--no-owner убирает восстановление владельцев, но не обязательно убирает права GRANT для старых ролей. Если на новом сервере этих ролей нет, восстановление с --exit-on-error может завершиться ошибкой.
Для переносимого дампа лучше добавить:
--no-privileges
или короткий вариант:
-x
Итог:
<pre>pg_dump \
  -h IP_SERV_POSTGR \
  -p 5432 \
  -U postgres \
  -d NAME_BD \
  -Fc \
  --no-owner \
  --no-privileges \
  -f "/PATH_DUMP/NAME_DUMP_$(date +%F).dump"
</pre>
Если задача заключается в точной аварийной копии с владельцами и правами, наоборот, --no-owner и --no-privileges использовать не следует. При этом роли PostgreSQL нужно сохранять отдельно:
<pre>
pg_dumpall \
  -h IP_SERV_POSTGR \
  -p 5432 \
  -U postgres \
  --globals-only \
  -f "/PATH_DUMP/postgres_globals.sql"
</pre>
</pre>
Проверьте дамп:
Проверьте дамп:

Текущая версия от 14:03, 14 сентября 2026

Выполняйте на сервере, где установлен клиент

Создаем папку для дампа

mkdir -p ~/postgre/dump

Создайте файл ~/.pgpass с содержимым

IP_SERV_POSTGR:5432:NAME_BD:postgres:ПАРОЛЬ

где:
IP_SERV_POSTGR - ip адрес сервера
NAME_BD - Имя БД которой создается дамп
postgres:ПАРОЛЬ - имя пользователя и пароль пользователя БД

Задайте права:

chmod 600 ~/.pgpass

Проверьте подключение:

psql -h IP_SERV_POSTGR -p 5432 -U postgres -d NAME_BD -c "SELECT current_database(), version();"

Создайте дамп в рекомендуемом custom-формате:

pg_dump \
  -h IP_SERV_POSTGR \
  -p 5432 \
  -U postgres \
  -d NAME_BD \
  -Fc \
  --no-owner \
  --no-privileges \
  -f "/PATH_DUMP/NAME_DUMP_$(date +%F).dump"

Если надо сделать дамп только нужных таблиц. Используйте параметр -t для каждой таблицы:

pg_dump \
  -h IP_SERV_POSGR \
  -p 5432 \
  -U postgres \
  -d NAME_BD \
  -Fc \
  --no-owner \
  -t 'main.tabl1' \
  -t 'main.tabl2' \
  -t 'main.tabl3' \
  -f /PATH_DUMP/FILE.dump

Плюсы:

  • используется custom-формат;
  • архив проверяется через pg_restore --list;
  • пароль вынесен в .pgpass;
  • права .pgpass установлены в 600;
  • --no-owner упрощает перенос между серверами.

Но есть нюансы.

  • --no-owner убирает восстановление владельцев, но не обязательно убирает права GRANT для старых ролей. Если на новом сервере этих ролей нет, восстановление с --exit-on-error может завершиться ошибкой.

Для переносимого дампа лучше добавить:

--no-privileges

или короткий вариант:

-x

Итог:

pg_dump \
  -h IP_SERV_POSTGR \
  -p 5432 \
  -U postgres \
  -d NAME_BD \
  -Fc \
  --no-owner \
  --no-privileges \
  -f "/PATH_DUMP/NAME_DUMP_$(date +%F).dump"

Если задача заключается в точной аварийной копии с владельцами и правами, наоборот, --no-owner и --no-privileges использовать не следует. При этом роли PostgreSQL нужно сохранять отдельно:

pg_dumpall \
  -h IP_SERV_POSTGR \
  -p 5432 \
  -U postgres \
  --globals-only \
  -f "/PATH_DUMP/postgres_globals.sql"

Проверьте дамп:

ls -lh /PATH_DUMP
pg_restore --list /PATH_DUMP/NAME_DUMP_$(date +%F).dump

Формат -Fc удобен для последующего восстановления через pg_restore. Дамп содержит всю базу NAME_BD, включая схему main.
-Fc означает custom format PostgreSQL:

  1. дамп сжатый;
  2. не является обычным SQL-файлом;
  3. восстанавливается командой pg_restore;
  4. позволяет выборочно восстанавливать объекты и использовать параллельные потоки.