БЕСПЛАТНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Бэкапы в PostgreSQL

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

Утилиты для создания бэкапов в PostgreSQL

Бэкапы в постгрес создаются с помощью соответствующих утилит. В среде Linux они доступны сразу из командной строки после установки постгрес. А для Windows эти утилиты реализованы в виде исполняемых .exe файлов и находятся в каталоге bin, который в свою очередь лежит в папке в которую вы установили постгрес.

postgres windows utilities

Для бэкапов могут использоваться следующие утилиты: 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++

postgres sql dump

Соответственно чтобы сделать восстановление из бэкапа нам надо воспользоваться утилитой psql, в которой мы обычно выполням команды sql из консоли. А в качестве источника ввода необходимо указать путь к файлу с дампом. Это можно выполнить следующей командой:

psql -U testuser -d testdb < D:\Backup\testdb_backup.sql

Здесь

  • -d testdb - имя базы данных
  • -U testuser - имя пользователя базы данных

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

postgres psql command

Бэкап в пользовательском формате

Создание бэкапа в кастомном формате также выполняется командой 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 это выглядит так:

postgres pg_restore command

Ссылки

На самом деле функционал в постгрес при создании бэкапов достаточно обширный. Можно устанавливать различные фильтры, можно использовать несколько потоков и т.д. Более подробно о бэкапах можно прочитать на официальном сайте postgresql: