Локальный бэкап всей базы данных PostgreSQL на ход ноги с максимальной производительностью
Что может быть лучше простого и быстрого способа забэкапить локальную БД на 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