Резервное копирование и восстановление PostgreSQL
Классификация методов
| Критерий | Логическое копирование | Физическое копирование |
|---|---|---|
| Уровень | Объекты БД (таблицы, функции) | Файлы кластера (страницы данных) |
| Утилиты | pg_dump, pg_dumpall | pg_basebackup, копия каталога данных |
| Восстановление | Совместимые мажорные версии | Та же мажорная версия и ОС |
| Размер | Меньше (без «пустых» страниц) | Больше |
| Гранулярность | Отдельная БД или объекты | Весь кластер |
| Скорость restore | Медленнее (выполнение SQL) | Быстрее (копирование файлов) |
Данные нельзя «переписать заново» — без проверенных резервных копий потеря необратима. Резервная копия ценна только после тестового восстановления.
Логическое резервное копирование
pg_dump
Форматы: plain (SQL-скрипт), custom (-Fc, сжатие), directory (-Fd, параллельность), tar.
# Бинарный сжатый дамп одной базы
pg_dump -Fc -f backup.dump mydb
# Параллельный дамп в каталог (4 потока)
pg_dump -Fd -j 4 -f backup_dir mydb
# Только одна таблица
pg_dump -t public.products -Fc -f products.dump mydb
Просмотр содержимого без восстановления:
pg_restore -l backup.dump
Восстановление
createdb mydb_restored
pg_restore -d mydb_restored backup.dump
После логического восстановления обновите статистику планировщика (pg_statistic в дамп не входит):
ANALYZE;
pg_dumpall
Резервная копия всего кластера, включая роли и глобальные настройки:
pg_dumpall -f cluster.sql
Физическое копирование и PITR
pg_basebackup
Горячая копия каталога данных. Требует настройки WAL:
# postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'test ! -f /archive/%f && cp %p /archive/%f'
pg_basebackup -D /backup/base -Fp -Xs -P
Восстановление на точку во времени (PITR)
- Восстановить физическую копию каталога данных.
- Создать
postgresql.auto.conf/ сигнал восстановления с параметрами:
restore_command = 'cp /archive/%f %p'
recovery_target_time = '2024-02-12 14:30:00'
recovery_target_action = 'promote'
- Запустить кластер в режиме восстановления до указанного момента.
Стратегия 3-2-1 и проверка
- 3 копии данных (рабочая + две резервные);
- 2 типа носителей;
- 1 копия вне площадки.
Проверка:
- логический дамп:
pg_restore -l backup.dump; - физическая копия:
pg_controldata /path/to/data; - регулярное тестовое восстановление в изолированной среде (не реже раза в квартал).
Ограничения и риски
Логическое:
- не переносит статистику — нужен
ANALYZE; - расширения из
shared_preload_librariesставятся вручную.
Физическое:
- нельзя восстановить одну базу отдельно от кластера;
- версия PostgreSQL и платформа должны совпадать.
Общее:
- непротестированная процедура восстановления;
- разрыв архива WAL;
- повреждение файлов при передаче без контрольных сумм.
Практический минимум
# Тестовая база и данные
createdb shop_backup_test
psql shop_backup_test -c "
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT,
price NUMERIC
);
INSERT INTO products (name, price) VALUES ('Товар А', 100.00);
"
pg_dump -Fc -f shop_backup.dump shop_backup_test
createdb shop_restored
pg_restore -d shop_restored shop_backup.dump
psql shop_restored -c "SELECT * FROM products;"
Контрольные вопросы
- Когда выбрать
pg_dump, а когдаpg_basebackup? - Почему после логического восстановления нужен
ANALYZE? - Что такое PITR и зачем архивировать WAL?
- Почему правило 3-2-1 не заменяет тестовое восстановление?
См. также
- Взаимодействие приложений с СУБД
- Шпаргалка по SQL — раздел резервного копирования
- Транзакции, изоляция и блокировки
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Вот SQL как раз обеспечивает такую связь и это главное отличие реляционных БД - реляции (relations), что означает связи. Знакомимся с языком - ставим программы, запускаем, выполняем первые запросы. От файлового хранения к реляционной и современной мультимодельной СУБД — термины, причины появления SQL и базовая классификация систем. Домены, атрибуты, кортежи и отношения — свойства реляционных таблиц и ограничения целостности при проектировании схемы. Функциональные зависимости, нормальные формы 1НФ–3НФ, аномалии обновления и осознанная денормализация при проектировании схемы. Метаданные СУБД через information_schema и pg_catalog — запросы к структуре таблиц, ключей и индексов в PostgreSQL. Логический порядок выполнения SELECT, проекция, WHERE, DISTINCT, ORDER BY и правила читаемого форматирования запросов. Скалярные и коррелированные подзапросы, EXISTS против IN, особенности NULL и выбор между подзапросом и JOIN. AND, OR, NOT, приоритет операторов, NULL и UNKNOWN, IS NULL, NOT IN и IS DISTINCT FROM в PostgreSQL. MVCC, уровни блокировок таблиц, FOR UPDATE, SKIP LOCKED, взаимоблокировки и диагностика через pg_locks. Учебная схема интернет-магазина для PostgreSQL — DDL и примеры запросов по темам курса SQL. Принципы работы SQL-движка - подключение к СУБД, разбор и выполнение запроса и возврат результата клиенту.SQL - язык структурированных запросов
Первые шаги с SQL
Эволюция систем хранения данных
Реляционная модель данных
Нормализация данных
Словарь данных и системные каталоги
Оператор SELECT — синтаксис и стиль
Подзапросы, EXISTS и IN
Фильтрация и трёхзначная логика
Блокировки и конкурентный доступ в PostgreSQL
Практикум shop_data
Принципы работы SQL-движка