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 →

