Бэкапы в PostgreSQL
Использование любой СУБД невозможно без периодического создания бэкапов баз данных. Это позволяет как подстаховаться от потери данных, если вдруг что-то пошло не по плану, так и развернуть базу с актуальными данными на тестовой среде. И сегодня рассмотрим второй случай. Когда у нас есть база данных PostgreSQL на сервере Linux, а мы хотим развернуть такую же БД у себя на локальной машине под управлением Windows
Утилиты для создания бэкапов в PostgreSQL
Бэкапы в постгрес создаются с помощью соответствующих утилит. В среде Linux они доступны сразу из командной строки после установки постгрес. А для Windows эти утилиты реализованы в виде исполняемых .exe файлов и находятся в каталоге bin, который в свою очередь лежит в папке в которую вы установили постгрес.

Для бэкапов могут использоваться следующие утилиты: pg_dump, pg_dumpall, pg_basebackup. Для наших целей будем использовать pg_dump. Про остальные можно почитать в документации. Ссылки есть в конце статьи.
Типы бэкапов
Утилита pg_dump позволяет делать бэкапы в нескольких формтах. Мы поговорим о двух. О бэкапе в sql формате, он же plain. И о пользовательском custom формате.
Бэкап в формате SQL
Чтобы создать бэкап в sql формате необходимо выполнить следующую команду:
pg_dump -d testdb -n testschema -U testuser --clean -f ./testdb_backup.sql
Здесь
- -d testdb - имя базы данных
- -n testschema - схема базы данных. В принципе можно и не указывать. Тогда в бэкап попадут все схемы
- -U testuser - имя пользователя базы данных
- --clean - указывает, что при восстановлении из бэкапа существующие данные будут очищены
- -f ./testdb_backup.sql - файл в который сохраняем бэкап
Теперь нам надо скопировать файл на локальную машину. Я использую для этого WinSCP
По сути получившийся файл - это обычный текстовый файл с DDL и DML инструкциями SQL. При необходимости мы можем просмотреть его в любом текстовом редакторе. Например в Notepad++

Соответственно чтобы сделать восстановление из бэкапа нам надо воспользоваться утилитой psql, в которой мы обычно выполням команды sql из консоли. А в качестве источника ввода необходимо указать путь к файлу с дампом. Это можно выполнить следующей командой:
psql -U testuser -d testdb < D:\Backup\testdb_backup.sql
Здесь
- -d testdb - имя базы данных
- -U testuser - имя пользователя базы данных
Так как мы договорились, что восстановление из бэкапа будем делать в Windows нам надо открыть консоль, перейти в каталог, где находится файл psql.exe и уже оттуда выполнять команду.

Бэкап в пользовательском формате
Создание бэкапа в кастомном формате также выполняется командой pg_dump, но с указанием формата с помощью параметра -F c. Также укажем параметр -b включить в дамп большие объекты (blobs). Общий вид команды будет такой:
pg_dump -F c -b -d testdb -n testschema -U testuser --clean -f ./testdb_backup.custom
Хочется отметить, что расширение у файла с бэкапом не принципиально. Можно задавать его произвольно. По размеру файл в пользовательском формате получается гораздо меньше чем в sql. На моих данных где-то в три раза.
Чтобы сделать восстановление из бэкапа, уже не получится воспользоваться консолью psql. Для пользовательского формата существуюет специальная утилита pg_restore
pg_restore -U testuser -d testdb --clean --if-exists D:\Backup\testdb_backup.custom
Параметры --clean --if-exists используются для предварительной очистки данных при восстановлении из бэкапа, если они существуют. В консоли Windows это выглядит так:

Ссылки
На самом деле функционал в постгрес при создании бэкапов достаточно обширный. Можно устанавливать различные фильтры, можно использовать несколько потоков и т.д. Более подробно о бэкапах можно прочитать на официальном сайте postgresql:
- Backup and Restore - общее описание
- Резервное копирование и восстановление - то же, что и в предыдущем только по-русски
- pg_dump
- pg_dumpall
- pg_basebackup