pg_dump — це інструмент командного рядка, який надає PostgreSQL, і дозволяє експортувати базу даних у файл резервної копії. Цей файл може містити або тільки структуру бази, або дані, або і те, і інше.
Головна перевага pg_dump у тому, що воно дозволяє переносити дані між серверами, відновлювати базу після збою або просто створювати архів для довготривалого зберігання. Варто зазначити, що ця утиліта більше підходить для логічного резервного копіювання (через SQL-запити), ніж для фізичного копіювання файлів бази даних.
Основний синтаксис команди pg_dump
Щоб створити резервну копію за допомогою pg_dump, достатньо виконати таку команду в терміналі:
pg_dump -U username -d database_name -f backup_file.sql
Розберемо компоненти команди:
-U username— вказує ім'я користувача PostgreSQL, яке використовується для підключення до бази.-d database_name— задає ім'я бази даних, для якої створюється резервна копія.-f backup_file.sql— визначає, куди зберегти файл резервної копії. Це може бути як повний шлях на диску, так і відносний.
Приклад: припустимо, у тебе є база university, і ти хочеш зробити резервну копію у файл university_backup.sql. Команда буде виглядати так:
pg_dump -U postgres -d university -f university_backup.sql
При цьому PostgreSQL попросить пароль користувача postgres, щоб дозволити доступ до даних.
Порада: якщо ти працюєш з локальним сервером і не хочеш кожного разу вводити пароль, налаштуй файл .pgpass. Почитай офіційну документацію PostgreSQL для додаткових інструкцій.
Параметри та їх використання
Утиліта pg_dump дуже гнучка і може бути налаштована для створення резервних копій з різними параметрами:
- Створення бекапу тільки структури бази
Якщо тобі потрібно зберегти лише структуру бази (наприклад, щоб розгорнути її на новому сервері), використовуй прапорець --schema-only. Приклад команди:
pg_dump -U postgres -d university --schema-only -f university_schema.sql
Це створить SQL-скрипт, який містить тільки команди CREATE TABLE, CREATE INDEX і т.д., без даних.
- Створення бекапу тільки даних
Іноді треба зберегти лише дані, без структури. В такому випадку використовуй прапорець --data-only:
pg_dump -U postgres -d university --data-only -f university_data.sql
Отриманий файл міститиме команди INSERT INTO, які відновлять твої дані.
- Стиснення резервної копії
Створений файл резервної копії може бути досить великим, особливо якщо у базі багато таблиць і даних. Щоб зменшити розмір файлу, використовуй параметр --compress:
pg_dump -U postgres -d university -f university_backup.sql --compress=6
Рівень стиснення задається числом від 0 (без стиснення) до 9 (максимальне стиснення). Майте на увазі, що чим вищий рівень стиснення, тим більше часу потрібно для створення резервної копії.
- Експорт у бінарний формат
Якщо хочеш використовувати швидший спосіб відновлення, можна зберегти резервну копію у бінарному форматі замість текстового SQL-скрипта:
pg_dump -U postgres -d university -Fc -f university_backup.dump
Ключ -Fc вказує формат Custom, який підтримує відновлення через утиліту pg_restore.
Приклади створення резервних копій
Повний бекап бази
Припустимо, у тебе є база company, і ти хочеш зробити повний бекап, включаючи структуру і дані:
pg_dump -U postgres -d company -f company_backup.sql
Бекап однієї таблиці
Якщо треба зберегти лише одну таблицю з бази, використовуй параметр -t:
pg_dump -U postgres -d company -t employees -f employees_backup.sql
Цей файл міститиме структуру і дані тільки з таблиці employees.
Бекап кількох таблиць
Для резервного копіювання кількох таблиць додай кілька параметрів -t:
pg_dump -U postgres -d company -t employees -t departments -f selected_tables_backup.sql
Стиснутий бекап
Щоб зекономити місце, використовуй прапорець --compress або одразу створи файл у стиснутому форматі:
pg_dump -U postgres -d company -Fc -f company_backup_compressed.dump
Корисні поради
Перевіряй розмір файлу бекапу. Якщо резервна копія занадто маленька, можливо, сталася помилка. Використовуй параметр --verbose для отримання детальнішої інформації про процес створення бекапу.
Автоматизуй процес. Використовуй cron або pg_cron, щоб налаштувати регулярне створення резервних копій. Не забудь про правильну ротацію старих бекапів, щоб не забити диск.
Перевіряй копії на коректність. Тестуй створені резервні копії шляхом відновлення бази на тестовому сервері.
Помилки, з якими ти можеш зіткнутися
Помилка автентифікації. Якщо ти не вказав правильного користувача або забув пароль, pg_dump видасть помилку. Переконайся, що налаштований файл .pgpass для автоматичної авторизації.
Помилка підключення. Якщо сервер PostgreSQL не запущений або ти неправильно вказав ім'я бази, утиліта не зможе створити резервну копію. Перевір ім'я бази і статус сервера.
Проблема з правами доступу. Користувач, від імені якого ти запускаєш pg_dump, має мати права на читання структури і даних бази. Використовуй роль адміністратора, якщо це можливо.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ