Skip to content
EN

Как настроить бэкап PostgreSQL

Коротко:

PostgreSQL бэкап — 3 уровня: логический (pg_dump, portable), физический (pg_basebackup, fast restore), continuous WAL archiving (point-in-time recovery). Для прод: daily pg_basebackup + WAL archiving в S3 + retention 30 дней. Тестируйте restore ежемесячно — untested backup = no backup.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Проверить свой сайт →

Пошаговая настройка

  1. Для daily snapshot: pg_dump -Fc -Z9 -f backup.dump dbname (compressed custom format)
  2. Для физического: pg_basebackup -D /backup/base -Ft -z -P -U replicator
  3. Настройте WAL archiving в postgresql.conf: archive_mode = on; archive_command = 'aws s3 cp %p s3://bucket/wal/%f'
  4. Автоматизация через cron: 0 3 * * * /usr/bin/pg_dump -Fc -f /backup/daily-\$(date +\%Y\%m\%d).dump dbname
  5. Upload в S3: AWS CLI или s3cmd для retention + offsite
  6. Test restore monthly: pg_restore -d new_db /backup/daily-20260401.dump
  7. Для PITR: pg_basebackup + apply WAL segments до target timestamp

Рабочие примеры

СценарийКонфиг
Simple daily pg_dump script#!/bin/bash DATE=$(date +%Y%m%d) pg_dump -Fc -Z9 -f /backup/mydb-$DATE.dump mydb aws s3 cp /backup/mydb-$DATE.dump s3://mybucket/postgres/ find /backup -name 'mydb-*.dump' -mtime +7 -delete
postgresql.conf (archiving)wal_level = replica archive_mode = on archive_command = 'test ! -f /archive/%f && cp %p /archive/%f' archive_timeout = 300
Restore from pg_dumpcreatedb newdb pg_restore -d newdb -j 4 /backup/mydb-20260401.dump
pg_basebackuppg_basebackup -h localhost -U replicator -D /backup/base_$(date +%Y%m%d) -Ft -z -P
PITR restore# restore_command in recovery.conf restore_command = 'cp /archive/%f %p' recovery_target_time = '2026-04-17 12:00:00'

Типичные ошибки

  • pg_dump для больших DB (100+ GB) — очень медленно. Используйте pg_basebackup
  • No WAL archiving = можно потерять данные между snapshot'ами
  • Backup не testing — первый raw fail в critical moment
  • Hardcoded password в script — security. Используйте .pgpass или IAM role
  • S3 без versioning — race при concurrent uploads потеряет последний

TL;DR

Для настройки бэкапа PostgreSQL в 2026 году используйте встроенную команду pg_dump для создания резервной копии базы данных. Например, команда pg_dump -U имя_пользователя -h хост -F c -b -v -f "backup.dump" имя_базы_данных создаст бэкап в формате custom. Рекомендуется автоматизировать процесс с помощью cron для регулярных резервных копий.

Понимание важности бэкапа PostgreSQL

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

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

  • Частота бэкапа: Определите, как часто необходимо создавать резервные копии — ежедневно, еженедельно или по расписанию в зависимости от объема изменяемых данных.
  • Формат бэкапа: PostgreSQL поддерживает различные форматы бэкапов — текстовый, custom, tar и другие. Каждый из них имеет свои преимущества и недостатки.
  • Хранение бэкапов: Подумайте о том, где хранить резервные копии. Локальные диски, облачные хранилища или внешние серверы.

Настройка автоматизированного бэкапа с помощью cron

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

  1. Откройте терминал и запустите команду crontab -e для редактирования crontab-файла.
  2. Добавьте строку, которая будет запускать pg_dump в указанное время. Например, для ежедневного бэкапа в 2 часа ночи:
0 2 * * * pg_dump -U имя_пользователя -h хост -F c -b -v -f "/путь/к/backup/$(date +\%Y-\%m-\%d).dump" имя_базы_данных

Убедитесь, что путь к бэкапам существует и у пользователя, под которым запускается cron, есть права для его записи.

Также стоит рассмотреть вопрос о хранении старых бэкапов. Вы можете добавить скрипт для удаления старых резервных копий, чтобы избежать переполнения диска. Например, добавьте следующую строку в crontab для удаления бэкапов старше 30 дней:

0 3 * * * find /путь/к/backup -type f -name "*.dump" -mtime +30 -exec rm {} \;

Ручное создание бэкапа и восстановление базы данных

Если вам не нужно настраивать автоматические бэкапы, вы можете создать резервную копию базы данных вручную. Для этого используйте команду pg_dump. Вот пример:

pg_dump -U имя_пользователя -h хост -F c -b -v -f "backup.dump" имя_базы_данных

После выполнения этой команды, резервная копия базы данных будет сохранена в файл backup.dump.

В случае необходимости восстановить базу данных из резервной копии, используйте команду pg_restore:

pg_restore -U имя_пользователя -h хост -d имя_базы_данных -v "backup.dump"

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

createdb -U имя_пользователя -h хост новая_база_данных

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

TL;DR

Для настройки бэкапа PostgreSQL в 2026 году используйте команду pg_dump для создания резервной копии базы данных. Для автоматизации процесса настройте cron-задачу, которая будет запускать pg_dump с заданными параметрами, например, pg_dump -U username -F c -b -v -f /path/to/backup/db_backup.backup dbname. Не забудьте проверить права доступа к каталогу для записи резервных копий.

Настройка бэкапа PostgreSQL с использованием pg_dump

Одним из самых распространенных способов создания резервной копии базы данных PostgreSQL является использование утилиты pg_dump. Этот инструмент позволяет создавать дампы как отдельных баз данных, так и отдельных таблиц. Важно понимать, что pg_dump не блокирует базу данных во время создания резервной копии, что позволяет пользователям продолжать работать с ней.

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

pg_dump -U username -F c -b -v -f /path/to/backup/db_backup.backup dbname

В этом примере:

  • -U username — имя пользователя, под которым вы подключаетесь к базе данных;
  • -F c — формат резервной копии (в данном случае — сжатый);
  • -b — включает большие объекты;
  • -v — включает подробный вывод информации;
  • -f /path/to/backup/db_backup.backup — путь, где будет сохранен файл резервной копии;
  • dbname — имя базы данных, которую вы хотите сохранить.

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

Для восстановления базы данных из резервной копии используйте команду pg_restore. Пример команды для восстановления:

pg_restore -U username -d dbname -v /path/to/backup/db_backup.backup

Здесь -d dbname указывает на базу данных, в которую вы хотите восстановить данные. Обратите внимание, что база данных должна существовать перед выполнением этой команды.

Больше по теме

Часто задаваемые вопросы

pg_dump vs pg_basebackup?

pg_dump — logical, per-database, portable (restore на другой PG version). pg_basebackup — physical, whole cluster, fast, но restore только на same PG version.

Incremental backups?

PG не имеет built-in incremental. Используйте pg_basebackup + WAL archiving (effectively incremental через WAL). Или tool pgBackRest.

Сколько retention?

Для compliance обычно 30-90 дней. For disaster recovery достаточно 7-14 days. S3 lifecycle rules помогают auto-cleanup.

Backup verification?

<code>pg_restore --list</code> показывает content. Real test: periodic full restore to staging, run smoke tests.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.