Локальный бэкап всей базы данных PostgreSQL на ход ноги с максимальной производительностью

29.09.2024

Что может быть лучше простого и быстрого способа забэкапить локальную БД на PostgreSQL...

Резервное копирование данных:

Рассмотрим вариант когда нам нужно очень быстро сделать бэкап БД в кастомном формате (сжатом):

PGPASSWORD="secret" pg_dump 
  -Fc 
  --host 127.0.0.1 
  --port 5432 
  --username homestead 
  --encoding UTF8 
  --blobs 
  --verbose 
  --no-privileges 
  --no-tablespaces 
  --no-unlogged-table-data 
  --file=backup.pgsql 
  db_name

Вот подробное объяснение каждого элемента:

PGPASSWORD="secret"

Задается переменная окружения PGPASSWORD, содержащая пароль для пользователя базы данных. Это позволяет передать пароль в команду без необходимости ввода его вручную. В данном случае, пароль равен "secret".

Тема небезопасная - но мы учитываем, что это актуально для домашней разработки или пэт-проджекта и нам надо всё сделать максимально быстро.

pg_dump

Утилита для создания дампа базы данных PostgreSQL. Она экспортирует структуру и данные из базы данных в файл.

-Fc

Опция указывает формат дампа. В данном случае используется формат custom (-Fc), который позволяет восстановление через pg_restore и обеспечивает более гибкие возможности управления дампом.

--host 127.0.0.1

Указывает хост для подключения к базе данных. В данном случае это локальный хост (127.0.0.1).

--port 5432

Указывает порт для подключения к базе данных. По умолчанию для PostgreSQL используется порт 5432.

--username homestead

Указывает имя пользователя базы данных, под которым выполняется подключение. В данном случае это homestead.

--encoding UTF8

Задает кодировку для данных, которые будут экспортированы. Здесь указана кодировка UTF-8.

--blobs

Опция указывает, что бинарные большие объекты (BLOB) также должны быть включены в дамп.

--verbose

Активирует режим подробного вывода. Команда будет выводить информацию о процессе дампа в консоль.

--no-privileges

Опция отключает экспорт прав доступа к объектам (GRANT/REVOKE), то есть привилегии пользователей не будут включены в дамп.

--no-tablespaces

Запрещает экспорт данных о табличных пространствах, что позволяет избежать зависимостей от табличных пространств, которые могут быть уникальными для разных серверов.

--no-unlogged-table-data

Означает, что данные из unlogged таблиц (таблицы, которые не записываются в журнал транзакций) не будут включены в дамп.

--file=backup.pgsql

Указывает путь и имя файла, в который будет записан дамп. В данном случае это файл backup.pgsql.

db_name

Имя базы данных, для которой создается дамп. Замените db_name на фактическое имя базы данных, которую нужно экспортировать.


Резюмируем:
PGPASSWORD="secret" pg_dump -Fc --host 127.0.0.1 --port 5432 --username homestead --encoding UTF8 --blobs --verbose --no-privileges --no-tablespaces --no-unlogged-table-data --file=backup.pgsql db_name

Эта команда создаст дамп базы данных db_name с локального сервера PostgreSQL (127.0.0.1 на порту 5432) в формате custom.
Дамп будет включать все данные и структуры, но без информации о привилегиях и табличных пространствах, а также без данных из unlogged таблиц.

Восстановление данных:

Для восстановления базы данных из кастомного дампа, созданного с помощью pg_dump используется утилита pg_restore.

Вот пример команды для восстановления:

PGPASSWORD="secret" pg_restore 
  --host 127.0.0.1 
  --port 5432 
  --username homestead 
  --dbname=db_name 
  --verbose backup.pgsql

Расшифровка параметров:

PGPASSWORD="secret"

Задается переменная окружения PGPASSWORD, содержащая пароль для пользователя базы данных. Это позволяет передать пароль в команду без необходимости ввода его вручную. В данном случае, пароль равен "secret".

pg_restore

Утилита для восстановления базы данных из дампа, созданного pg_dump.

--host 127.0.0.1

Указывает хост для подключения к базе данных (локальный хост 127.0.0.1).

--port 5432

Указывает порт для подключения к базе данных (по умолчанию для PostgreSQL используется порт 5432).

--username homestead

Указывает имя пользователя базы данных для подключения (в данном случае пользователь homestead).

--dbname=db_name

Имя базы данных, в которую будет восстановлен дамп. Если эта база данных уже существует, pg_restore попытается восстановить данные в неё. Если её нет, её нужно создать заранее:

createdb -h 127.0.0.1 -p 5432 -U homestead db_name

--dbname=db_name

Включает подробный вывод процесса восстановления, чтобы увидеть, что происходит на каждом этапе.

backup.pgsql

Имя файла дампа, который был создан командой pg_dump.


Резюмируем:

Быстро восстановили бэкап из кастомного формата и это круто!

PGPASSWORD="secret" pg_restore --host 127.0.0.1 --port 5432 --username homestead --dbname=db_name --verbose backup.pgsql

Тэги: