PostgreSQL • 11 апреля 2025 • 10 мин чтения

Как сделать бэкап базы данных PostgreSQL

Резервное копирование — важная часть работы с любой системой управления базами данных. Потеря данных может обойтись дорого, особенно если речь идёт о рабочих проектах, где ежедневно обновляется информация. В этой статье разберёмся, как сделать бэкап базы данных PostgreSQL, какие инструменты для этого использовать и как избежать частых ошибок.
Базовый способ — с помощью утилиты pg_dump, которая входит в стандартный пакет PostgreSQL. Она позволяет создать текстовый файл со структурой и содержимым базы. Такой файл можно затем перенести, заархивировать или использовать для восстановления.

Пример простой команды:

pg_dump -U имя_пользователя имя_базы > backup.sql

Это создаёт дамп базы данных в виде SQL-файла. Он пригодится, если нужно сохранить БД в PostgreSQL в локальном архиве или перенести на другой сервер.

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

Зачем вообще нужно регулярно сохранять базу данных и как организовать процесс резервного копирования грамотно – разберём в следующем разделе.

Зачем нужен бэкап и основные принципы резервного копирования

Даже надёжные системы могут дать сбой. Ошибки в коде, сбои оборудования, действия злоумышленников — всё это может привести к потере данных. Чтобы защититься, администраторы регулярно создают резервные копии. Это своего рода страховка, которая помогает восстановить базу в исходное состояние за считанные минуты.

Представьте: вы случайно удалили таблицу с важной информацией. Без бэкапа — катастрофа, с бэкапом — просто техническая задача. Именно поэтому резервное копирование базы данных PostgreSQL входит в стандартный регламент работы с сервером.

Вот базовые принципы, которые стоит учитывать:

  1. Регулярность. Бэкапы должны выполняться по расписанию: ежедневно, еженедельно или перед важными изменениями.
  2. Надёжность хранения. Хранить копии лучше в разных местах: локально и в облаке.
  3. Контроль целостности. После создания копии нужно проверять, открывается ли файл и можно ли из него восстановить БД.
  4. Минимизация простоев. Идеально, если процесс копирования не мешает работе пользователей.
  5. Разделение доступа. Только определённые сотрудники должны иметь право создавать и использовать дампы.

Многие администраторы ошибочно считают, что однократное резервирование достаточно. Но в случае сбоя такой подход не спасёт. Лучше автоматизировать процесс и не полагаться на память или везение.

В курс «PostgreSQL База» мы включили множество практических заданий, основанных на реальных сценариях, с которыми сталкиваются команды эксплуатации. Благодаря интенсивной практике вы сможете укрепить свои навыки и уверенно применять их в своих проектах.

Понимание основ — шаг к устойчивой архитектуре. Далее рассмотрим, как сделать дамп базы данных PostgreSQL с помощью pg_dump — самого популярного инструмента для этой задачи.

pg_dump: основные команды и параметры

pg_dump — основной инструмент, когда нужно создать дамп базы данных
PostgreSQL. Он прост в использовании и гибкий в настройках. Главное преимущество — возможность выгрузить структуру и данные в удобном для восстановления формате.

Чтобы выгрузить базу, используют команду:

pg_dump -U postgres mydb > mydb_backup.sql

Здесь:

  • -U postgres — имя пользователя,
  • mydb — название базы данных,
  • > — перенаправление вывода в файл.
Если нужно скопировать базу данных PostgreSQL частично (например, только структуру без данных), используют флаг --schema-only:

pg_dump -U postgres --schema-only mydb > schema.sql

Для обратной задачи — экспортировать только данные — подходит --data-only:

pg_dump -U postgres --data-only mydb > data.sql

Можно указать формат вывода. По умолчанию создаётся SQL-файл, но pg_dump также поддерживает сжатый формат (-Fc) — его удобно использовать с утилитой pg_restore:

pg_dump -U postgres -Fc mydb > mydb.dump

Чтобы включить все базы и роли, используют pg_dumpall:

pg_dumpall -U postgres > all_dbs.sql

Важно: pg_dump не блокирует доступ к базе, поэтому его можно применять в рабочих системах. Однако при больших объёмах данных стоит быть готовым к временной нагрузке на диск и процессор.

Этот способ удобен, когда нужно сохранить БД в PostgreSQL вручную или внедрить его в скрипт резервного копирования. Далее рассмотрим альтернативный вариант — pg_basebackup, подходящий для создания полной физической копии кластера.

pg_basebackup: особенности использования

pg_basebackup — инструмент для создания полной физической копии PostgreSQL-кластера. В отличие от pg_dump, он копирует не только данные, но и конфигурацию, включая журналы транзакций (WAL). Это особенно важно для репликации и быстрой миграции.

Команда для создания резервной копии выглядит так:

pg_basebackup -U репликатор -D /backup/pgdata -Fp -Xs -P

Поясним:

  • -U — имя пользователя (должен иметь права репликации),
  • -D — путь, куда сохраняется копия,
  • -Fp — указывает формат (в данном случае plain),
  • -Xs — включает передачу WAL-файлов,
  • -P — отображает прогресс.

Инструмент позволяет быстро скопировать базу целиком, включая все настройки. Такой подход особенно полезен для настройки standby-серверов или в ситуациях, когда важно получить полную, побитовую копию БД.

Важно: pg_basebackup требует, чтобы в конфигурации PostgreSQL были включены параметры wal_level = replica и разрешён доступ для роли репликатора.

Этот метод — оптимальное решение для создания "горячей" резервной копии. Но стоит помнить, что он может использовать больше ресурсов и требует больше прав доступа, чем логическое копирование через pg_dump.

Далее рассмотрим, как и зачем использовать WAL-архивирование — третий вариант создания резервной копии базы данных PostgreSQL.

Дарим демодоступ к обучению на 3 дня, чтобы вы познакомились с материалами и спикерами курса!
Начните бесплатно учиться делать SQL-запросы проще и быстрее

WAL-архивирование: когда использовать

WAL (Write-Ahead Logging) — это механизм, при котором PostgreSQL сначала записывает все изменения в журнал, а уже затем применяет их к данным. Этот принцип можно использовать для резервного копирования: сохраняя WAL-файлы, вы получаете возможность восстановить базу до любого состояния, включая точку последнего коммита.

Чтобы активировать WAL-архивирование, в конфигурации postgresql.conf задают параметры:

archive_mode = on
archive_command = 'cp %p
/var/lib/postgresql/wal_archive/%f'

Таким образом, после каждого завершённого WAL-сегмента PostgreSQL будет копировать его в указанную директорию.

Преимущества подхода:

  • Возможность восстановления до нужного момента времени (Point-in-Time Recovery);
  • Идеально сочетается с pg_basebackup, обеспечивая полную защиту данных;
  • Подходит для крупных проектов с высокими требованиями к отказоустойчивости.

Минус — повышенное потребление дискового пространства. Поэтому стоит настроить автоматическое удаление устаревших журналов и контролировать объёмы.

Если вы хотите сохранить базу данных в PostgreSQL с учётом всех изменений, WAL-архивирование — надёжный вариант. Но его настройка требует опыта и внимательности.

В следующем разделе поговорим об автоматизации резервного копирования, чтобы не делать всё вручную.

Автоматизация процесса резервного копирования

Ручное резервное копирование — рискованный и трудозатратный подход. Один пропущенный день — и при сбое вы останетесь без актуальной копии. Автоматизация помогает систематизировать процесс и избежать ошибок.

Самый простой способ — создать bash-скрипт и запустить его по расписанию через cron. Пример скрипта для создания ежедневного дампа базы:

#!/bin/bash
TIMESTAMP=$(date +%F-%H-%M)
BACKUP_DIR="/var/backups/pgsql"
DB_NAME="mydb"
USER="postgres"

mkdir -p $BACKUP_DIR
pg_dump -U $USER $DB_NAME > $BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql

Чтобы запускать его каждую ночь, добавьте строку в crontab:

0 2 * * * /usr/local/bin/pgsql_backup.sh

Для надёжности можно настроить уведомление на почту или в мессенджер, если бэкап не удался.

Также можно использовать специализированные инструменты:

  • Barman — мощный инструмент для резервного копирования и восстановления PostgreSQL с поддержкой WAL-архивов;
  • pgBackRest — масштабируемое решение с шифрованием, инкрементальными бэкапами и проверкой целостности;
  • Wal-G — облачно-ориентированная утилита с поддержкой S3-совместимых хранилищ.

Эти инструменты удобны для крупных проектов, где важно быстро восстановить базу данных PostgreSQL и контролировать каждый этап копирования.

Автоматизация — ключ к безопасности. Настроив её однажды, вы сможете быть уверены: резервные копии создаются и хранятся вовремя, даже если админ в отпуске.

В следующем разделе обсудим, где и как лучше хранить эти копии.
Не знаете PostgreSQL? Пора сделать Update своих навыков!
На курсе PostgreSQL База от Слёрм вы научитесь работе с резервным копированием.

Лучшие практики хранения резервных копий

Сделать дамп базы — это только половина дела. Важно правильно его хранить. Иначе в нужный момент копия может оказаться устаревшей, повреждённой или вовсе недоступной.

Вот ключевые рекомендации:

1. Храните копии в разных местах.
Комбинируйте локальные и облачные хранилища. Например, один дамп сохраняется на внешний диск, второй — в S3-хранилище. Это защищает от сбоев оборудования и краж.

2. Настройте ротацию бэкапов.
Не храните все копии подряд. Удаляйте старые, оставляя только последние 5–7. Это можно автоматизировать скриптом, чтобы не заполнять диски.

3. Регулярно проверяйте копии.
Файл может создаться, но быть пустым или повреждённым. Раз в неделю пробуйте восстановить базу на тестовом сервере — это покажет, можно ли ей реально воспользоваться.

4. Шифруйте и защищайте доступ.
Резервная копия может содержать конфиденциальные данные. Используйте шифрование (gpg, openssl) и храните ключи отдельно. Доступ к копиям должен быть только у ответственных администраторов.

5. Документируйте процедуру восстановления.
Если восстановить бд PostgreSQL может только один человек — это риск. Инструкция должна быть понятной и доступной остальным.

Сохранить БД в PostgreSQL — это ещё не гарантия безопасности. Важно, где и как вы храните резервную копию. В следующем разделе расскажем, как правильно восстанавливать данные из бэкапа.

Как восстановить базу данных из резервной копии

Когда база данных удалена, повреждена или испорчена миграцией — важно быстро восстановить её из копии. Способ восстановления зависит от того, каким инструментом создавался бэкап.

Если вы использовали pg_dump и сохранили дамп в виде SQL-файла, восстановить базу можно так:

psql -U postgres -d mydb < mydb_backup.sql

Если базы с таким именем ещё нет, её нужно сначала создать:

createdb -U postgres mydb

В случае, когда дамп был в сжатом формате (.dump, .backup) через pg_dump -Fc, применяется утилита pg_restore:

pg_restore -U postgres -d mydb mydb.dump

Можно добавить опции, чтобы задать конкретные схемы, таблицы или формат восстановления. Например:

pg_restore -C -U postgres -d postgres mydb.dump

Флаг -C указывает создать базу перед восстановлением.

Если копия была создана через pg_basebackup, восстановление предполагает замену текущего кластера на сохранённую версию. Перед этим нужно остановить сервер:

pg_ctl stop -D /var/lib/postgresql/data

Затем — заменить данные и запустить сервер снова:

cp -r /backup/pgdata/* /var/lib/postgresql/data/
pg_ctl start -D /var/lib/postgresql/data

Для восстановления с использованием WAL-архивов нужно указать recovery.conf (или postgresql.auto.conf и recovery.signal в новых версиях), задать restore_command и целевую точку отката (recovery_target_time).

Пример команды восстановления по времени:

recovery_target_time = '2025-03-20 14:00:00'

Это позволяет вернуть состояние базы к определённому моменту — даже до случайного удаления данных.

Как загрузить дамп базы данных PostgreSQL — зависит от ситуации. Поэтому всегда проверяйте, с помощью чего он был создан, и готовьте инструкции заранее. А в идеале — тестируйте восстановление регулярно.

Заключение и рекомендации

Резервное копирование — не дополнительная опция, а базовая обязанность каждого администратора. Если вы ещё не знаете, как сделать бэкап базы данных PostgreSQL — самое время разобраться и внедрить чёткий регламент.

Подводим основные рекомендации:

  • Делайте бэкапы регулярно, автоматически и с логами;
  • Храните резервные копии на внешних и облачных носителях;
  • Используйте разные инструменты: pg_dump, pg_basebackup, архивирование WAL;
  • Проверяйте восстановление на тестовых серверах — не только теоретически, но и на практике;
  • Шифруйте дампы, ограничивайте доступ, документируйте каждый шаг.

Как выгрузить базу данных из PostgreSQL? Простой SQL-дамп подойдёт большинству проектов. А для серьёзных решений лучше использовать комплексный подход с автоматизацией, ротацией и журналами.

И помните: один правильный бэкап лучше сотни извинений после сбоя.
📘 Хотите узнать больше?

Присоединяйтесь к курсу «PostgreSQL База» — изучите резервное копирование, настройку репликации, безопасность и оптимизацию. Разбираем реальные кейсы и даём поддержку на практике.

Статью подготовили

Редакция Слёрма
Понравилась статья? Будем рады вашему лайку и репосту — вдруг кому-то тоже пригодится:)
Оцените статью

Читайте также: