Руководство по PostgreSQL pg_dump и pg_restore

Резервное копирование и восстановление базы данных PostgreSQL является важной задачей для любого системного администратора. К счастью, существуют встроенные утилиты pg_dump и pg_restore, облегчающие выполнение этих задач.

Введение

Используя эти утилиты, администраторы могут создать полное, инкрементное или непрерывное резервное копирование локально или удаленно.

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

Чтобы помочь вам лучше понять эти процессы, мы расскажем, что они собой представляют, и разберем несколько примеров.

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

Команда pg_dump

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

Будет создан дамп только одной базы данных. Если необходимо создать резервную копию кластера баз данных, прокрутите страницу вниз до команды pg_dumpall.

Выходные данные pg_dump

Выходными данными являются либо файлы сценариев, либо архивные файлы. Дамп сценария - это обычный текстовый файл, содержащий SQL-команды, которые могут восстановить базу данных до состояния, в котором она была на момент сохранения. Передача файла в psql восстановит эти скрипты. Файлы сценариев работают с другими базами данных и могут использоваться на различных машинах и архитектурах.

Несколько модификаций в опциях даже позволяют использовать этот тип файлов с другими продуктами баз данных SQL.

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

Формат вывода

Существует также гибкость при архивировании и переносе информации. Использование формата архива с помощью pg_dump и возвращение его обратно с помощью pg_restore позволяет выполнять более конкретное восстановление. pg_dump создает резервную копию всей базы данных, затем pg_restore выбирает, какие части базы данных архивировать или восстановить.

Использование таких форматов выходных файлов, как "custom" и "directory", позволяет добиться наибольшей гибкости. Эти форматы поддерживают переупорядочивание архивных элементов, параллельное восстановление и автоматически приходят сжатыми. Если вы хотите запускать параллельные дампы, то формат "directory" будет вашим единственным выбором.

Сборщик статистики PostgreSQL

Если был запущен pg_dump, обязательно посмотрите на вывод всех стандартных ошибок, которые будут напечатаны.
Запуск pg_dump приведет к внутреннему выполнению операторов "select". Чтобы операции работали правильно, вы должны уметь выбирать информацию из базы данных с помощью psql. Любые внешние библиотечные переменные, например, libpq, будут по-прежнему включены при запуске утилиты.

Сборщик статистики отвечает за сбор активности базы данных для pg_dump. Если вы не хотите его использовать, вы можете воспользоваться командой "alter user" или зайти в "pgoptions" и изменить параметр track_counts.

Структура команды

Стандартная команда будет иметь следующий формат:

Postgresql имеет онлайн-документацию, в которой описаны все опции, доступные для pg_dump, включая то, как их записывать и что делает та или иная опция.

Примеры pg_dump

Выгрузка базы данных dangerousdb в SQL-файл:

Резервное копирование dangerousdb в формате tar:

Сохранение dangerousdb в формате каталога выполняется этой командой:

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

Перезагрузка скрипта во вновь созданную базу данных nowdb:

Выгрузка одной таблицы возможна при использовании опции -t и указании базы данных и имени вкладки (здесь: dangerousdb; lab)

Выгрузка выбранных таблиц путем задания условий. Здесь команда выгрузит все таблицы, начинающиеся с "lab" в схеме "sam", но исключит таблицу "test".

Команда pg_restore

Команда pg_restore берет архивный файл, созданный командой pg_dump, и восстанавливает выбранную базу данных PostgreSQL.

Если pg_dump используется с одним из форматов текста, отличных от plain, команда restore восстановит базу данных. Утилита знает, как выдать команды в правильном порядке, чтобы убедиться, что база данных будет восстановлена в точном состоянии, в котором она находилась в момент сохранения.

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

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

Режимы pg_restore

Существует два режима работы утилиты. Если пользователь указывает имя базы данных, pg_restore подключается к этой базе данных и восстанавливает содержимое непосредственно на ней. Если имя не указано, процесс создает сценарий с командами SQL для восстановления базы данных.

При втором выборе результатом будет файл со стандартным выводом, и он будет выглядеть аналогично стандартному текстовому сценарию, который сгенерирует pg_dump.

Структура и формат команды

Команда будет иметь следующий формат:

Полный список опций для этих команд вы можете найти в документации PostgreSQL.

Примеры pg_restore

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

Если база данных testdb уже существует, следующая команда восстановит ее:

Если база данных еще не существует, следующая команда восстановит ее:

Следующая команда восстановит резервную копию из файла резервной копии, т.е. имя: back_it.sql

Команда pg_dumpall

Утилита PostgreSQL извлекает кластер баз данных в файл сценария

Используя команду pg_dumpall, пользователь может создать резервную копию целого кластера баз данных и извлечь их в один файл сценария. Файл работает так же, как и команда pg_dump, то есть сценарий будет использовать команды SQL для восстановления всех баз данных.

Фактически, эта команда будет вызывать pg_dump для каждой базы данных в кластере. Некоторые части архитектуры, такие как глобальные объекты, также сохраняются. Роли баз данных, табличные пространства и любая информация, которая является общей для всех баз данных, будет сохранена pg_dumpall, чего pg_dump никогда не коснется.

Использование pg_dumpall

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

В конечном файле будет использоваться стандартный вывод SQL-сценария. Запуск этой утилиты потребует подключения к серверу PostgreSQL один раз для каждой базы данных во время выполнения дампа. Если вы используете аутентификацию по паролю, вам придется указать пароль для каждой базы данных в кластере.

Сообщения об ошибках

Многие из появляющихся сообщений об ошибках будут относиться к pg_dump, поскольку команда выполняет эту утилиту внутри системы. Некоторые ошибки неизбежно появятся, но не будут иметь никакого значения. Сценарий "создаст роли" для каждой роли, существующей в используемом вами кластере.

Такие роли, как суперпользователь bootstrap, скорее всего, получат ошибку "роль уже существует".

Использование опции --clean

Базы данных сохранят все предыдущее содержимое и свойства на уровне базы данных. Если вы хотите быть уверены, что базы данных будут восстановлены именно в том виде, в котором они есть, использование опции --clean может оказаться полезным.

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

Использование опции --if-exists

Добавление опции --if-exists уберет эти ошибки, если они слишком мешают.

Выполнение команды "analyze" для каждой базы данных даст оптимизатору полезную статистику для определения того, как прошло восстановление.

Структура и формат команды

Команда для утилиты pg_dumpall будет иметь следующую структуру:

PostgreSQL имеет обширную документацию, в которой описаны все опции, доступные для использования утилиты, если вы ищете что-то конкретное.

Примеры pg_dumpall

Следующая команда создаст дамп всех баз данных:

Эта команда перезагрузит базы данных из файла:

Эта команда выгрузит все файлы и создаст один файл под названием back_it.sql

Заключение

С помощью этих утилит многие функции резервного копирования PostgreSQL могут быть реализованы без особых усилий.

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий