Открыть сервис

pg_dump: утилита резервного копирования PostgreSQL

pg_dump — это стандартная утилита командной строки системы управления базами данных PostgreSQL, предназначенная для создания логических резервных копий базы данных в виде файла с SQL-командами или архивом. В отличие от физического копирования файлов данных, pg_dump выгружает содержимое базы данных в переносимый текстовый или бинарный формат, что позволяет восстанавливать данные на другой версии сервера или архитектуре. Утилита входит в стандартный дистрибутив PostgreSQL и разрабатывается в рамках глобального проекта PostgreSQL, основанного в 1996 году.

Назначение и принцип работы

pg_dump работает на уровне клиентского приложения и подключается к работающему серверу баз данных по сетевому протоколу. В процессе выгрузки утилита выполняет чтение системного каталога, формирует последовательность SQL-операторов (CREATE TABLE, COPY, INSERT и других), которые при выполнении на пустой базе воспроизводят исходное состояние данных. Такой подход гарантирует согласованность данных на момент начала резервного копирования, поскольку pg_dump запускает транзакцию с уровнем изоляции REPEATABLE READ (при использовании формата plain) — это позволяет получить единый снимок базы без блокировки операций записи.

Для работы pg_dump не требует прав суперпользователя, однако для полного копирования всех объектов (включая права доступа, расширения и большие объекты) рекомендуется запускать её от имени владельца базы данных или пользователя с соответствующими привилегиями. Утилита не выгружает служебные базы данных (template0, template1, postgres) и не копирует конфигурационные файлы сервера.

Форматы вывода

pg_dump поддерживает четыре основных формата выходного файла, задаваемых параметром -F:

  • plain (текстовый SQL) — создаёт файл с набором SQL-команд, который можно выполнить через psql. Это наиболее переносимый формат, однако он не поддерживает параллельное восстановление и выборочное извлечение объектов.
  • custom (пользовательский архив) — сжатый бинарный формат, позволяющий выбирать отдельные объекты при восстановлении, использовать параллельное восстановление и интерактивный режим утилиты pg_restore.
  • directory (каталог) — создаёт директорию, в которой каждый объект хранится в отдельном файле, а общий архив — в файле toc.dat. Формат поддерживает параллельное создание резервной копии (параметр -j) и восстановление.
  • tar — архив в формате tar, совместимый с утилитой pg_restore, но не поддерживающий сжатие на лету и параллельное восстановление.

Ключевые параметры

Утилита обладает широким набором опций, позволяющих тонко настраивать процесс выгрузки:

  • -h и -p — адрес хоста и порт сервера;
  • -U — имя пользователя для подключения;
  • -d — имя базы данных (может быть передано как первый аргумент);
  • -t — выгрузка только указанной таблицы (можно указывать несколько раз);
  • -n — выгрузка только указанной схемы;
  • -a — выгрузка только данных без схемы (без DDL-команд);
  • -s — выгрузка только схемы без данных;
  • -c — добавление команд DROP для удаления объектов перед созданием;
  • -C — добавление команды CREATE DATABASE в начало вывода;
  • -j — число параллельных рабочих процессов (только для формата directory);
  • -Z — уровень сжатия (от 0 до 9) для форматов custom и directory;
  • --inserts — использование команд INSERT вместо COPY для совместимости со сторонними СУБД;
  • --column-inserts — вариант INSERT с явным перечислением столбцов;
  • --no-owner и --no-privilegesисключение команд установки владельца и прав доступа;
  • --exclude-table — исключение таблиц по шаблону.

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

Для восстановления резервной копии используются две утилиты: psql (для текстового формата plain) и pg_restore (для форматов custom, directory и tar). pg_restore позволяет выборочно восстанавливать отдельные объекты, изменять порядок восстановления, а также выполнять параллельное восстановление с указанием количества процессов. Перед восстановлением обычно создаётся новая пустая база данных командой createdb, после чего выполняется команда вида pg_restore -d newdb backup.dump. Для текстового формата применяется команда psql -d newdb -f backup.sql.

Ограничения и особенности

pg_dump не предназначена для создания непрерывных резервных копий и не заменяет физическое резервирование на уровне файловой системы (например, с использованием pg_basebackup). Она не выгружает данные, хранящиеся в файлах вне табличного пространства, такие как большие объекты в некоторых конфигурациях, а также не включает в архив содержимое представлений материализации, если они не помечены как таблицы. Кроме того, при выгрузке очень больших баз данных текстовый формат может занимать значительный объём дискового пространства, а время выполнения операции растёт пропорционально размеру данных.

Для автоматизации регулярного резервного копирования pg_dump часто используется совместно с планировщиками задач (cron в Unix-подобных системах или Планировщиком заданий Windows) и скриптами, обеспечивающими ротацию архивов. Существуют также сторонние обёртки, такие как pg_dumpall — утилита для выгрузки всех баз данных кластера вместе с глобальными объектами (ролями и табличными пространствами), однако она не поддерживает параллельную выгрузку и формат custom.

Практические примеры использования

Типичная команда для создания резервной копии базы данных mydb в пользовательском формате со сжатием выглядит следующим образом:

`` pg_dump -U postgres -F c -Z 9 -f mydb.dump mydb ``

Для выгрузки только схемы базы данных без данных используется параметр -s:

`` pg_dump -U postgres -s -f schema.sql mydb ``

Восстановление из архива custom с параллельным режимом выполняется так:

`` pg_restore -U postgres -d mydb_new -j 4 mydb.dump ``

Альтернативы

Помимо pg_dump, в экосистеме PostgreSQL существуют и другие инструменты резервного копирования: физическое копирование с помощью pg_basebackup, снапшоты файловых систем, а также сторонние решения, такие как Barman, WAL-G и pgBackRest, которые обеспечивают непрерывное архивирование журналов предзаписи (WAL) и точечное восстановление на момент времени. Выбор конкретного инструмента зависит от требований к отказоустойчивости, допустимому времени простоя и объёму данных.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →