Postgresql восстановление базы из backup: Как восстановить данные PostgreSQL из резервной копии — Effector Saver

PostgreSQL : Документация: 9.6: 25.1. Выгрузка в SQL : Компания Postgres Professional

25.1.1. Восстановление дампа

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

25.1.3. Управление большими базами данных

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

pg_dump имя_базы > файл_дампа

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

Программа pg_dump является для PostgreSQL обычным клиентским приложением (хотя и весьма умным). Это означает, что вы можете выполнять процедуру резервного копирования с любого удалённого компьютера, если имеете доступ к нужной базе данных. Но помните, что pg_dump не использует для своей работы какие-то специальные привилегии. В частности, ей обычно требуется доступ на чтение всех таблиц, которые вы хотите выгрузить, так что для копирования всей базы данных практически всегда её нужно запускать с правами суперпользователя СУБД. (Если у вас нет достаточных прав для резервного копирования всей базы данных, вы тем не менее можете сделать резервную копию той части базы, доступ к которой у вас есть, используя такие параметры, как -n схема или -t таблица.)

Указать, к какому серверу должна подключаться программа pg_dump, можно с помощью аргументов командной строки -h сервер и -p порт. По умолчанию в качестве сервера выбирается localhost или значение, указанное в переменной окружения PGHOST. Подобным образом, по умолчанию используется порт, заданный в переменной окружения PGPORT, а если она не задана, то порт, указанный по умолчанию при компиляции. (Для удобства при компиляции сервера обычно устанавливается то же значение по умолчанию.)

Как и любое другое клиентское приложение PostgreSQL, pg_dump по умолчанию будет подключаться к базе данных с именем пользователя, совпадающим с именем текущего пользователя операционной системы. Чтобы переопределить имя, либо добавьте параметр -U, либо установите переменную окружения PGUSER. Помните, что pg_dump подключается к серверу через обычные механизмы проверки подлинности клиента (которые описываются в Главе 20).

Важное преимущество pg_dump в сравнении с другими методами резервного копирования, описанными далее, состоит в том, что вывод pg_dump обычно можно загрузить в более новые версии PostgreSQL, в то время как резервная копия на уровне файловой системы и непрерывное архивирование жёстко зависят от версии сервера. Также, только метод с применением pg_dump будет работать при переносе базы данных на другую машинную архитектуру, например, при переносе с 32-битной на 64-битную версию сервера.

Дампы, создаваемые pg_dump, являются внутренне согласованными, то есть, дамп представляет собой снимок базы данных на момент начала запуска pg_dump. pg_dump не блокирует другие операции с базой данных во время своей работы. (Исключение составляют операции, которым нужна исключительная блокировка, как например, большинство форм команды ALTER TABLE.)

25.1.1. Восстановление дампа

Текстовые файлы, созданные pg_dump, предназначаются для последующего чтения программой psql. Общий вид команды для восстановления дампа:

psql имя_базы < файл_дампа

где файл_дампа — это файл, содержащий вывод команды pg_dump. База данных, заданная параметром имя_базы, не будет создана данной командой, так что вы должны создать её сами из базы template0 перед запуском psql (например, с помощью команды createdb -T template0 имя_базы). Программа psql принимает параметры, указывающие сервер, к которому осуществляется подключение, и имя пользователя, подобно pg_dump. За дополнительными сведениями обратитесь к справке по psql. Дампы, выгруженные не в текстовом формате, восстанавливаются утилитой pg_restore.

Перед восстановлением SQL-дампа все пользователи, которые владели объектами или имели права на объекты в выгруженной базе данных, должны уже существовать. Если их нет, при восстановлении будут ошибки пересоздания объектов с изначальными владельцами и/или правами. (Иногда это желаемый результат, но обычно нет).

По умолчанию, если происходит ошибка SQL, программа psql продолжает выполнение. Если же запустить psql с установленной переменной ON_ERROR_STOP, это поведение поменяется и psql завершится с кодом 3 в случае возникновения ошибки SQL:

psql --set ON_ERROR_STOP=on имя_базы < файл_дампа

В любом случае вы получите только частично восстановленную базу данных. В качестве альтернативы можно указать, что весь дамп должен быть восстановлен в одной транзакции, так что восстановление либо полностью выполнится, либо полностью отменится. Включить данный режим можно, передав psql аргумент -1 или --single-transaction. Выбирая этот режим, учтите, что даже незначительная ошибка может привести к откату восстановления, которое могло продолжаться несколько часов. Однако это всё же может быть предпочтительней, чем вручную вычищать сложную базу данных после частично восстановленного дампа.

Благодаря способности pg_dump и psql писать и читать каналы ввода/вывода, можно скопировать базу данных непосредственно с одного сервера на другой, например:

pg_dump -h host1 имя_базы | psql -h host2 имя_базы

Важно

Дампы, которые выдаёт pg_dump, содержат определения относительно template0. Это означает, что любые языки, процедуры и т. п., добавленные в базу через template1, pg_dump также выгрузит в дамп. Как следствие, если при восстановлении вы используете модифицированный template1, вы должны создать пустую базу данных из template0, как показано в примере выше.

После восстановления резервной копии имеет смысл запустить ANALYZE для каждой базы данных, чтобы оптимизатор запросов получил полезную статистику; за подробностями обратитесь к Подразделу 24.1.3 и Подразделу 24.1.6. Другие советы по эффективной загрузке больших объёмов данных в PostgreSQL вы можете найти в Разделе 14.4.

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

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

pg_dumpall > файл_дампа

Полученную копию можно восстановить с помощью psql:

psql -f файл_дампа postgres

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

pg_dumpall выдаёт команды, которые заново создают роли, табличные пространства и пустые базы данных, а затем вызывает для каждой базы pg_dump. Таким образом, хотя каждая база данных будет внутренне согласованной, состояние разных баз не будет синхронным.

Только глобальные данные кластера можно выгрузить, передав pg_dumpall ключ --globals-only. Это необходимо, чтобы полностью скопировать кластер, когда pg_dump выполняется для отдельных баз данных.

25.1.3. Управление большими базами данных

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

Используйте сжатые дампы. Вы можете использовать предпочитаемую программу сжатия, например gzip:

pg_dump имя_базы | gzip > имя_файла.gz

Затем загрузить сжатый дамп можно командой:

gunzip -c имя_файла.gz | psql имя_базы

или:

cat имя_файла.gz | gunzip | psql имя_базы

Используйте split.  Команда split может разбивать выводимые данные на небольшие файлы, размер которых удовлетворяет ограничению нижележащей файловой системы. Например, чтобы получить части по 2 гигабайта:

pg_dump имя_базы | split -b 2G - имя_файла

Восстановить их можно так:

cat имя_файла* | psql имя_базы

Использовать GNU split можно вместе с gzip:

pg_dump имя_базы | split -b 2G --filter='gzip > $FILE.gz'

Восстановить данные после такого разбиения можно с помощью команды zcat.

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

pg_dump -Fc имя_базы > имя_файла

Дамп в специальном формате не является скриптом для psql и должен восстанавливаться с помощью команды pg_restore, например:

pg_restore -d имя_базы имя_файла

За подробностями обратитесь к справке по командам pg_dump и pg_restore.

Для очень больших баз данных может понадобиться сочетать split с одним из двух других методов.

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

pg_dump -j число -F d -f выходной_каталог имя_базы

Вы также можете восстановить копию в параллельном режиме с помощью pg_restore -j. Это поддерживается для любого архива в формате каталога или специальном формате, даже если архив создавался не командой pg_dump -j.

резервное копирование с помощью pg_dump и pg_restore

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

Для начала подготовим сервер. Для демо-стенда закажем виртуальный сервер в Облачной платформе. Для этого откроем панель управления my.selectel.ru, перейдем в меню Облачная платформа и нажмем на кнопку Создать сервер.

В статье будем использовать виртуальный сервер с конфигурацией 2 vCPU, 4 ГБ RAM и 10 ГБ HDD с операционной системой CentOS 8 64-bit.

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

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

Перед началом демонстрации возможностей резервного копирования, мы подготовили PostgreSQL. Для целей наполнения базы данных и создания непрерывного потока записи, развернули там Zabbix (некоторое время назад публиковали о нем статью).

Создание резервных копий и восстановление из командной строки

В этом разделе мы расскажем как сделать дамп базы данных PostgreSQL в консоли при подключении по SSH, разберем синтаксис и покажем примеры использования утилит pg_dump, pg_dumpall, pg_restore, pg_basebackup и wal-g.

Утилита pg_dump

В PostgreSQL есть встроенный инструмент для создания резервных копий — утилита pg_dump. Утилита имеет простой синтаксис:

# pg_dump <параметры> <имя базы> > <файл для сохранения копии> 

В простейшем случае достаточно указать имя базы данных, которую в дальнейшем нужно будет восстановить. 5].*» -o -name «*-[023]?.*» \) -ctime +61 -delete
pg_dump -U $dbUser $database | gzip > $pathB/pgsql_$(date «+%Y-%m-%d»).sql.gz
unset PGPASSWORD

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

# crontab -e
3 0 * * * /etc/scripts/pgsql_dump.sh # postgres pg dump

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

# pg_dump -h 192.168.56.101 zabbix > /tmp/zabbix.dump

Ключ -t задает таблицу, для которой нужно создать резервную копию:

# pg_dump -t history zabbix > /tmp/zabbix.dump # postgres dump table

При помощи специальных ключей можно создавать резервные копии структуры данных или непосредственно данных:

# pg_dump --schema-only zabbix > /tmp/zabbix.dump
# pg_dump --data-only zabbix > /tmp/zabbix.dump

У утилиты pg_dump также есть ключи для сохранения дампа в другие форматы. Чтобы сохранить копию в виде бинарного файла используются ключи -Fc:

# pg_dump -Fc zabbix > /tmp/zabbix. bak

Чтобы создать архив — -Ft:

# pg_dump -Ft zabbix > /tmp/zabbix.tar

Чтобы сохранить в directory-формате — -Fd:

# pg_dump -Fd zabbix > /tmp/zabbix.dir

Резервное копирование в виде каталогов позволяет выполнять процесс в многопоточном режиме.

Ниже мы перечислим возможные параметры утилиты pg_dump.

-d <имя_бд>, —dbname=имя_бд — база данных, к которой выполняется подключение.

-h <сервер>, —host=сервер — имя сервера.

-p <порт>, —port=порт — порт для подключения.

-U <пользователь>, —username=пользователь) — учетная запись, используемое для подключения.

-w, —no-password — деактивация требования ввода пароля.

-W, —password — активация требования ввода пароля.

—role=имя роли — роль, от имени которой генерируется резервная копия.

-a, —data-only — вывод только данных, вместо схемы объектов (DDL).

-b, —blobs — параметр добавляет в выгрузку большие объекты.

-c, —clean — добавление команд DROP перед командами CREATE в файл резервной копии.

-C, —create — генерация реквизитов для подключения к базе данных в файле резервной копии.

-E <кодировка>, —encoding=кодировка — определение кодировки резервной копии.

-f <файл>, —file=файл — задает имя файла, в который будет сохраняться вывод утилиты.

-F <формат>, —format=формат — параметр определяет формат резервной копии. Доступные форматы:

  • p, plain) — формирует текстовый SQL-скрипт;
  • c, custom) — формирует резервную копию в архивном формате;
  • d, directory) — формирует копию в directory-формате;
  • t, tar) — формирует копию в формате tar.

-j <число_заданий>, —jobs=число_заданий — параметр активирует параллельную выгрузку для одновременной обработки нескольких таблиц (равной числу заданий). Работает только при выгрузке копии в формате directory.

-n <схема>, —schema=схема — выгрузка в файл копии только определенной схемы.

-N <схема>, —exclude-schema=схема — исключение из выгрузки определенных схем.

-o, —oids — добавляет в выгрузку идентификаторы объектов (OIDs) вместе с данными таблиц.

-O, —no-owner — деактивация создания команд, определяющих владельцев объектов в базе данных.

-s, —schema-only —добавление в выгрузку только схемы данных, без самих данных.

-S <пользователь>, —superuser=пользователь — учетная запись привилегированного пользователя, которая должна использоваться для отключения триггеров.

-t <таблица>, —table=таблица — активация выгрузки определенной таблицы.

-T <таблица>, —exclude-table=таблица —исключение из выгрузки определенной таблицы.

-v, —verbose — режим подробного логирования.

-V, —version — вывод версии pg_dump.

-Z 0..9, —compress=0..9 — установка уровня сжатия данных. 0 — сжатие выключено.

Утилита pg_dumpall

Утилита pg_dumpall реализует резервное копирование всего экземпляра (кластера или инстанса) базы данных без указания конкретной базы данных на инстансе. По принципу схожа с pg_dump. Добавим, что только утилиты pg_dump и pg_dumpall предоставляют возможность создания логической копии данных, остальные утилиты, рассматриваемые в этой статье, позволяют создавать только бинарные копии.

# pg_dumpall > /tmp/instance.bak

Чтобы сразу сжать резервную копию экземпляра базы данных, нужно передать вывод на архиватор gzip:

# pg_dumpall | gzip > /tmp/instance.tar.gz

Ниже приведены параметры, с которыми может вызываться утилита pg_dumpall.

-d <имя_бд>, —dbname=имя_бд — имя базы данных.

-h <сервер>, —host=сервер — имя сервера.

-p <порт>, —port=порт — TCP-порт, на который принимаются подключения.

-U <пользователь>, —username=пользователь — имя пользователя для подключения.

-w, —no-password — деактивация требования ввода пароля.

-W, —password — активация требования ввода пароля.

—role=<имя роли> — роль, от имени которой генерируется резервная копия.

-a, —data-only — создание резервной копии без схемы данных.

-c, —clean — добавление операторов DROP перед операторами CREATE.

-f <имя_файла>, —file=имя_файла — активация направления вывода в указанный файл.

-g, —globals-only — выгрузка глобальных объектов без баз данных.

-o, —oids — выгрузка идентификаторов объектов (OIDs) вместе с данными таблиц.

-O, —no-owner — деактивация генерации команд, устанавливающих принадлежность объектов, как в исходной базе данных.

-r, —roles-only — выгрузка только ролей без баз данных и табличных пространств.

-s, —schema-only — выгрузка только схемы без самих данных.

-S <имя_пользователя>, —superuser=имя_пользователя — привилегированный пользователь, используемый для отключения триггеров.

-t, —tablespaces-only — выгрузка табличных пространства без баз данных и ролей.

-v, —verbose — режим подробного логирования.

-V (—version — вывод версии утилиты pg_dumpall.

Утилита pg_restore

Утилита позволяет восстанавливать данные из резервных копий. Например, чтобы восстановить только определенную БД (в нашем примере zabbix), нужно запустить эту утилиту с параметром -d:

# pg_restore -d zabbix /tmp/zabbix.bak

Чтобы этой же утилитой восстановить определенную таблицу, нужно использовать ее с параметром -t:

# pg_restore -a -t history /tmp/zabbix. bak

Также утилитой pg_restore можно восстановить данные из бинарного или архивного файла. Соответственно:

# pg_restore -Fc zabbix.bak
# pg_restore -Ft zabbix.tar

При восстановлении можно одновременно создать новую базу:

# pg_restore -Ft -С zabbix.tar

Восстановить данные из дампа также возможно при помощи psql:

# psql zabbix < /tmp/zabbix.dump

Если для подключения нужно авторизоваться, вводим следующую команду:

# psql -U zabbix -W zabbix < /tmp/zabbix.dump

Ниже приведен синтаксис утилиты pg_restore.

-h <сервер>, —host=сервер — имя сервера, на котором работает база данных.

-p <порт>, —port=порт — TCP-порт, через база данных принимает подключения.

-U <пользователь>, —username=пользователь — имя пользователя для подключения..

-w, —no-password — деактивация требования ввода пароля.

-W, —password — активация требования ввода пароля.

—role=имя роли — роль, от имени которой выполняется восстановление резервная копия.

<имя_файла> — расположение восстанавливаемых данных.

-a, —data-only — восстановление данных без схемы.

-c, —clean — добавление операторов DROP перед операторами CREATE.

-C, —create — создание базы данных перед запуском процесса восстановления.

-d <имя_бд>, —dbname=имя_бд — имя целевой базы данных.

-e, —exit-on-error — завершение работы в случае возникновения ошибки при выполнении SQL-команд.

-f <имя_файла>, —file=имя_файла — файл для вывода сгенерированного скрипта.

-F <формат>, —format=формат — формат резервной копии. Допустимые форматы:

  • p, plain — формирует текстовый SQL-скрипт;
  • c, custom — формирует резервную копию в архивном формате;
  • d, directory — формирует копию в directory-формате;
  • t, tar — формирует копию в формате tar.

-I <индекс>, —index=индекс — восстановление только заданного индекса.

-j <число-заданий>, —jobs=число-заданий — запуск самых длительных операций в нескольких параллельных потоках.

-l, —list) — активация вывода содержимого архива.

-L <файл-список>, —use-list=файл-список — восстановление из архива элементов, перечисленных в файле-списке в соответствующем порядке.

-n <пространство_имен>, —schema=схема — восстановление объектов в указанной схеме.

-O, —no-owner — деактивация генерации команд, устанавливающих владение объектами по образцу исходной базы данных.

-P <имя-функции(тип-аргумента[, …])>, —function=имя-функции(тип-аргумента[, …]) — восстановление только указанной функции.

-s, —schema-only — восстановление только схемы без самих данных.

-S <пользователь>, —superuser=пользователь — учетная запись привилегированного пользователя, используемая для отключения триггеров.

-t <таблица>, —table=таблица — восстановление определенной таблицы.

-T <триггер>, —trigger=триггер — восстановление конкретного триггера.

-v, —verbose — режим подробного логирования.

-V, —version — вывод версии утилиты pg_restore.

Утилита pg_basebackup

Утилитой pg_basebackup можно выполнять резервное копирования работающего кластера баз данных PostgreSQL. Результирующий бинарный файл можно использовать для репликации или восстановления на определенный момент в прошлом. Утилита создает резервную копию всего экземпляра базы данных и не дает возможности создавать слепки данных отдельных сущностей. Подключение pg_basebackup к PostgreSQL выполняется при помощи протокола репликации с полномочиями суперпользователя или с правом REPLICATION.

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

# pg_basebackup -D /tmp

Чтобы создать сжатые файлы из табличных пространств, добавим параметры -Ft и -z:

# pg_basebackup -D /tmp -Ft -z 

То же самое, но со сжатием bzip2 и для экземпляра базы с общим табличным пространством:

# pg_basebackup -D /tmp -Ft | bzip2 > backup. tar.bz2

Ниже приведен синтаксис утилиты pg_basebackup.

-d <строка_подключения>, —dbname=строка_подключения — определение базы данных в виде строки для подключения.

-h <сервер>, —host=сервер — имя сервера с базой данных.

-p <порт>, —port=порт — TCP-порт, через база данных принимает подключения.

-s <интервал>, —status-interval=интервал — количество секунд между отправками статусных пакетов.

-U <пользователь>, —username=пользователь — установка имени пользователя для подключения.

-w, —no-password — отключение запроса на ввод пароля.

-W, —password — принудительный запрос пароля.

-V, —version — вывод версии утилиты pg_basebackup.

-?, —help — вывод справки по утилите pg_basebackup.

-D каталог, —pgdata=каталог — директория записи данных.

-F <формат>, —format=формат — формат вывода. Допустимые варианты:

  • p, plain — значение для записи выводимых данных в текстовые файлы;
  • t, tar — значение, указывающее на необходимость записи в целевую директорию в формате tar.

-r <скорость_передачи>, —max-rate=скорость_передачи — предельная скорость передачи данных в Кб/с.

-R, —write-recovery-conf — записать минимальный файл recovery.conf в директорию вывода.

-S <имя_слота>, —slot=имя_слота — задание слота репликации при использовании WAL в режиме потоковой передачи.

-T <каталог_1=каталог_2>, —tablespace-mapping=каталог_1=каталог_2 — активация миграции табличного пространства из одного каталога в другой каталог при копировании.

—xlogdir=каталог_xlog — директория хранения журналов транзакций.

-X <метод>, —xlog-method=метод — активация вывода файлов журналов транзакций WAL в резервную копию на основе следующих методов:

  • f, fetch — включение режима сбора файлов журналов транзакций при окончании процесса копирования;
  • s, stream — включение передачи журнала транзакций в процессе создания резервной копии.

-z, —gzip — активация gzip-сжатия результирующего tar-файла.

-Z <уровень>, —compress=уровень — определение уровня сжатия механизмом gzip.

-c , —checkpoint=fast|spread — активация режима реперных точек.

-l <метка>, —label=метка — установка метки резервной копии.

-P, —progress — активация в вывод отчета о прогрессе.

-v, —verbose — режим подробного логирования.

Утилита wal-g

Wal-g — утилита для резервного копирования и восстановления базы данных PostgreSQL. При помощи wal-g можно выполнять сохранение резервных копий на хранилищах S3 или просто на файловой системе. Ниже мы разберем установку, настройку и работу с утилитой. Покажем как выполнить резервное копирование в Облачное хранилище S3 от Selectel.

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

Дополнительную информацию можно получить в нашей Базе знаний. Первую часть логина изменить нельзя — это идентификатор пользователя в панели управления. Вторая часть логина задается произвольно. Например, 123456_wal-g:

Теперь перейдем к установке wal-g. Скачаем готовый установочный пакет из репозитория на github.com, распакуем и скопируем папку содержающую исполняемые файлы:

# cd /tmp
# curl -L "https://github.com/wal-g/wal-g/releases/download/v0.2.19/wal-g.linux-amd64.tar.gz" -o "wal-g.linux-amd64.tar.gz
# tar -xzf wal-g.linux-amd64.tar.gz
# mv wal-g /usr/local/bin/

Заполним конфигурационный файл wal-g и изменим его владельца на учетную запись postgres:

# cat > /var/lib/pgsql/.walg.json << EOF
 {
     "WALG_S3_PREFIX": "s3://container",
     "AWS_ENDPOINT": "https://s3.selcdn.ru"
     "AWS_ACCESS_KEY_ID": "123456_wal-g",
     "AWS_SECRET_ACCESS_KEY": "password",
     "WALG_COMPRESSION_METHOD": "brotli",
     "WALG_DELTA_MAX_STEPS": "5",
     "PGDATA": "/var/lib/pgsql/data",
     "PGHOST": "/var/run/postgresql/. s.PGSQL.5432"
 }
 EOF
# chown postgres: /var/lib/pgsql/.walg.json

Далее настроим автоматизированное создание резервных копий в PostgreSQL и перезагрузим процессы базы данных:

# echo "wal_level=replica" >> /var/lib/pgsql/data/postgresql.conf
# echo "archive_mode=on" >> /var/lib/pgsql/data/postgresql.conf
# echo "archive_command='/usr/local/bin/wal-g wal-push \"%p\" >> /var/log/postgresql/archive_command.log 2>&1' " >> /var/lib/pgsql/data/postgresql.conf
# echo “archive_timeout=60” >> /var/lib/pgsql/data/postgresql.conf
# echo "restore_command='/usr/local/bin/wal-g wal-fetch \"%f\" \"%p\" >> /var/log/postgresql/restore_command.log 2>&1' " >> /var/lib/pgsql/data/postgresql.conf
# killall -s HUP postgres

Теперь проверим корректность проведения настроек и загрузим резервную копию в хранилище:

# su - postgres -c '/usr/local/bin/wal-g backup-push /var/lib/pgsql/data'

После выполнения процесса резервного копирования, в созданном контейнере появится директория с резервными копиями баз данных:

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

Утилита pgAdmin

Управлять созданием резервных копий возможно также и в графическом интерфейсе. Для этого мы будем использовать утилиту pgAdmin. Актуальную версию для Windows или другой поддерживаемой ОС можно свободно скачать с официального сайта.

После скачивания утилиту нужно установить и запустить. Она работает в виде веб-приложения через браузер.

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

После выполнения команды Backup резервная копия сохраняется в заранее определенную директорию.

Работа с облачной базой данных в панели управления Selectel

В Облачной платформе Selectel есть возможность создавать управляемые базы данных (Managed Databases). Такие БД разворачиваются в несколько кликов мыши, однако, их основные преимущества — автоматическое резервное копирование, отказоустойчивость, быстрое масштабирование и управление различными характеристиками из графического интерфейса. Ниже мы создадим экземпляр управляемой базы данных, создадим резервную копию базы данных на виртуальном сервере и восстановим ее в управляемую базу данных.

Чтобы создать управляемую базу данных, перейдем в меню Базы данных и нажмем кнопку Создать кластер:

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

Обращаем внимание на блок Резервные копии, в котором указаны частота резервного копирования, время и срок хранения выгрузок. «Под капотом» используется механизм wal-g, о котором мы писали выше.

Автоматическое создание резервных копий отключить нельзя.

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

После этого появится приглашение ввести имя пользователя и пароль. После ввода этих данных нажимаем Сохранить.

Пользователь создан и отображается в списке пользователей.

Теперь создадим базу данных. Для этого перейдем на вкладку Базы данных и нажмем на кнопку Создать базу данных.

Заполняем необходимые поля и нажимаем кнопку Сохранить.

База данных создана и отображается в списке баз данных.

Теперь проверим возможность подключения. Для этого откроем консоль и вводим реквизиты:

# psql "host=192.168.0.3 \
port=6432 \
user=rosella \
dbname=zabbix \
sslmode=disable"

В консоли должно появиться приглашение к вводу SQL-запроса или других управляющих команд.

Выполним резервное копирование при помощи команды pg_dump:

# pg_dump zabbix > /tmp/zabbix.dump

И следом резервное восстановление в созданную управляемую базу данных:

# psql -h 192.168.0.3 -U rosella -d zabbix < /tmp/zabbix.dump

В результате выполнения команды выше мы восстановили резервную копию в управляемую базу данных.

Чтобы воспользоваться восстановлением из резервной копии, которая автоматически создается на платформе Selectel, необходимо нажать на символ с тремя точками. В открывшемся меню нужно нажать на опцию Восстановить. После этого появится модальное окно, в котором можно выбрать резервную копию, а также дату и время, на которое нужно восстановить базу данных. Это так называемый Point-in-Time Recovery из WAL-файлов.

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

Заключение

Мы рассмотрели возможности выполнения резервного копирования и показали отличия утилит pg_dump, pg_dumpall, pg_restore, pg_basebackup и wal-g. Вы увидели как можно создать управляемую базу данных, чтобы переложить часть административных задач на облачного провайдера.

Узнать подробнее об управляемых базах данных можно в документации Selectel.

postgresql — восстановить файл резервной копии postgres с помощью командной строки?

спросил

Изменено
10 дней назад

Просмотрено
1,2 млн раз

Я новичок в postgresql и локально использую pgadmin3. Однако на удаленном сервере у меня нет такой роскоши.

Я уже создал резервную копию базы данных и скопировал ее, но есть ли способ восстановить резервную копию из командной строки? Я вижу только вещи, связанные с графическим интерфейсом или pg_dumps, поэтому, если кто-то может сказать мне, как это сделать, это было бы потрясающе!

  • postgresql
  • командная строка
  • резервное копирование
  • восстановление

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

Вашим первым источником информации должна быть справочная страница pg_dump, так как именно она создает сам дамп. Там написано:

Дампы могут выводиться в скрипте или
форматы архивных файлов. Дампы скриптов
текстовые файлы, содержащие SQL
команды, необходимые для восстановления
базу данных в состояние, в котором она была
в то время, когда он был сохранен. К
восстановить из такого скрипта, скормить его
psql(1). Файлы скриптов можно использовать
восстановить базу данных даже
на других машинах и др.
архитектуры; с некоторыми модификациями
даже на других продуктах баз данных SQL.

Альтернативные форматы файлов архива
должен использоваться с pg_restore(1) для
восстановить базу данных. Они разрешают
pg_restore, чтобы быть избирательным в отношении того, что
восстановить или даже изменить порядок
предметы до реставрации.
Форматы архивных файлов предназначены для
быть переносимым между архитектурами.

Так что зависит от того, как он был выгружен. Если вы используете Linux/Unix, вы, вероятно, можете понять это с помощью отличной команды file(1) — если в ней упоминается текст ASCII и/или SQL, его следует восстановить с помощью psql, в противном случае вам, вероятно, следует использовать pg_restore.

Восстановление довольно просто:

 psql -U имя пользователя -d имя_базы_данных < имя_файла.sql
-- Для Postgres версии 9.0 или более ранней
psql -U имя пользователя -d имя базы данных -1 -f имя файла.sql
 

или

 pg_restore -U имя пользователя -d имя базы данных -1 имя файла.dump
 

Ознакомьтесь с их справочными страницами — там довольно много параметров, влияющих на работу восстановления. Возможно, вам придется очистить ваши «живые» базы данных или воссоздать их из template0 (как указано в комментарии) перед восстановлением, в зависимости от того, как были созданы дампы.

15

создать резервную копию

 pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f
"/usr/local/backup/10. 70.0.61.backup" old_db
 

-F c — это пользовательский формат (сжатый и может выполняться параллельно с -j N ) -b — это , включая большие двоичные объекты , -v — это 3, 60 0 0 9059 подробный — это имя файла резервной копии .

восстановление из резервной копии

 pg_restore -h localhost -p 5432 -U postgres -d old_db -v
"/usr/local/резервная копия/10.70.0.61.резервная копия"
 

важно установить -h localhost - вариант

3

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

 су - постгрес
psql -l # выведет список всех баз данных в кластере Postgres
 

pg_dump/pg_restore

 pg_dump -U имя пользователя -f backup.dump имя_базы_данных -Fc
 

переключатель -F указать формат файла резервной копии:

  • c будет использовать пользовательский формат PostgreSQL, который сжат и дает наименьший размер файла резервной копии
  • d для каталога, где каждый файл представляет собой одну таблицу
  • t для архива TAR (больше пользовательского формата)
  • -h / --host Указывает имя хоста машины, на которой работает сервер
  • -W / --password Принудительно pg_dump запрашивать пароль перед подключением к базе данных

восстановить резервную копию:

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

Параметр -C должен создать базу данных перед импортом данных. Если это не сработает, вы всегда можете создать базу данных, например. с помощью команды (как пользователь postgres или другая учетная запись, имеющая права на создание баз данных) createdb db_name -O owner

pg_dump/psql

Если вы не указали аргумент -F по умолчанию обычный использовался текстовый формат SQL (или с -F стр. ). Тогда вы не сможете использовать pg_restore . Вы можете импортировать данные с помощью psql .

резервная копия:

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

восстановление:

 psql -d имя_базы_данных -f backup.sql
 

5

POSTGRESQL 9.1.12

DUMP:

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

введите пароль пользователя и нажмите Enter.

ВОССТАНОВЛЕНИЕ:

 psql -U user db_name < /directory/archive.sql
 

введите пароль пользователя и нажмите Enter.

1

Ниже приведена моя версия pg_dump , которую я использую для восстановления базы данных:

 pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup
 

или используйте psql :

 psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup
 

где -h хост, -p порт, -u имя пользователя для входа, -d имя базы данных

2

Резервное копирование и восстановление с помощью GZIP

Для базы данных большего размера это очень хорошо

резервная копия

 pg_dump -U пользователь -d mydb | gzip > mydb. pgsql.gz
 

восстановление

 gunzip -c mydb.pgsql.gz | psql имя_базы_данных -U пользователь
 

https://www.postgresql.org/docs/14/backup-dump.html

3

Это сработало для меня:

 pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username last.dump
 

1

 Резервное копирование: $ pg_dump -U {имя пользователя} {source_db} -f {dumpfilename.sql}
Восстановление: $ psql -U {имя пользователя} -d {dumpfilename.sql}
 

0

попробуйте это:

 psql -U <имя пользователя> -d <имя базы данных> -f <имя файла>.sql
 

Восстановление базы данных psql из файла .sql

1

Если вы создаете резервную копию с помощью pg_dump, вы можете легко восстановить ее следующим образом:

  1. Открыть окно командной строки
  2. Перейти в папку bin Postgres. Например: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Введите команду для восстановления базы данных. Например: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Введите пароль для вашего пользователя postgres
  5. Проверьте процесс восстановления

Я не видел здесь упоминаний о расширении файла дампа (*.dump).

Это решение сработало для меня:

У меня есть файл дампа, и мне нужно его восстановить.

Сначала я попытался сделать это с помощью pg_restore и получил:

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

Я сделал это с psql и работал хорошо:

 psql -U myUser -d myDataBase < path_to_the_file/file.dump
 

1. Откройте Терминал.

2. Создайте резервную копию базы данных с помощью следующей команды:

ваш почтовый ящик -> /opt/PostgreSQL/9. 1/bin/

исходный сервер базы данных -> 192.168.1.115

имя вашей исходной базы данных -> mydatabase

 /opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-password --format custom --blobs --file "/home/dinesh/db/mydb.backup" "mydatabase"
 

3. Восстановите файл mydb.backup в место назначения.

ваш целевой сервер -> localhost

имя вашей целевой базы данных -> mydatabase

Создайте базу данных для восстановления резервной копии.

 /opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c «СОЗДАТЬ БАЗУ ДАННЫХ mydatabase»
 

Восстановить резервную копию.

 /opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db /mydb.backup"
 

Резервное копирование и восстановление

Это комбинация, которую я использую для резервного копирования , удаления, создания и восстановления моей базы данных (на macOS и Linux):

 sudo -u postgres pg_dump -Fc mydb > ./mydb.sql
sudo -u postgres dropdb mydb
sudo -u postgres createdb -O db_user mydb
sudo -u postgres pg_restore -d mydb < ./mydb.sql
 

Разное

1

1) Откройте терминал psql.

2) Разархивируйте/распакуйте файл дампа.

3) Создать пустую базу данных.

4) используйте следующую команду для восстановления файла .dump

 -# \i 
 

Для восстановления файла дампа

 psql -d [имя_базы] -U [имя_пользователя] -p 5432 < [FileLocation]
 

Чтобы восстановить файл . SQL

 pg_restore -U [имя пользователя] -d [имя базы данных] -1 [FileLocation]
 

Если вы получаете ошибки аутентификации пользователя, перейдите к файлу pg_hba.conf, который находится в папке PSQL/data в ваших программных файлах, и измените «МЕТОД» на «Доверять».
Перезапустите сервер psql в службах Windows (Win + R --> services.msc).

попытка:

 pg_restore -h localhost -p 5432 -U <имя пользователя> -d <имя базы данных> -1 <имя файла>
 

Восстановление файла резервной копии postgres зависит от того, как вы сделали резервную копию.

Если вы использовали pg_dump с -F c или -F d, вам нужно использовать pg_restore, в противном случае вы можете просто использовать

psql -h localhost -p 5432 -U postgres < файл резервной копии

9 способов резервного копирования и восстановления баз данных postgres

1

Как сказано ниже, вы можете использовать команду psql для восстановления файла дампа:

https://www. postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE

 psql dbname < infile
 

, если вам нужно установить имя пользователя, просто добавьте имя пользователя после команды, например:

 psql dbname < infile username
 

Извините за некропост, но мне эти решения не подошли. У меня postgres 10. В Linux:

  1. Мне пришлось сменить каталог на мой pg_hba.conf.
  2. Мне пришлось отредактировать файл, чтобы изменить метод с однорангового узла на md5, как указано здесь
  3. Перезапустите службу: перезапуск службы postgresql-10
  4. Перейдите в каталог, где находился мой backup.sql, и выполните:
    psql postgres -d имя_базы_данных -1 -f backup.sql

    -database_name - это имя моей базы данных

    -backup.sql — это имя моего файла резервной копии .sql.

Попробуйте посмотреть, могут ли вам помочь следующие команды:

 sudo su - yourdbuser
psql
\i ваш резервный файл
 
 psql "postgresql://:@:/" < "backup. sql"
 
 psql.exe "postgresql://:@:/" < "backup.sql"
 

У меня были проблемы с аутентификацией при запуске pg_dump, поэтому я переместил файл дампа

 mv database_dump /tmp
 

во временный каталог, а затем запустил

 su -u postgres
компакт-диск /tmp
pg_restore database_dump
 

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

Если у вас есть резервная копия файла SQL, вы можете легко восстановить ее.
Просто следуйте инструкциям, приведенным ниже

 1. Сначала создайте базу данных с помощью pgAdmin или чего угодно (например, my_db — это имя нашей созданной базы данных)
2. Теперь откройте окно командной строки
3. Перейдите в папку bin Postgres. Например: cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Введите следующую команду для восстановления базы данных: psql. exe -U postgres -d my_db -f D:\Backup\имя_файла_резервной_копии.sql
 

При необходимости введите пароль для вашего пользователя postgres и дайте Postgres выполнить свою работу. Затем вы можете проверить процесс восстановления.

Backup==>

Вариант 1: Сделать резервную копию вместе с паролем в cmd
1.PGPASSWORD="mypassword" pg_dump -U postgres -h localhost --inserts mydb>mydb.sql
Вариант 2: Сделать резервную копию без пароль в cmd
2. pg_dump -U postgres -h localhost --inserts mydb>mydb.sql
Вариант 3: сделать резервную копию как gzip (если база данных огромна)
3. pg_dump -U postgres -h localhost mydb - -вставки | gzip > mydb.gz

Восстановление:
1. psql -h localhost -d mydb -U postgres -p 5432 < mydb.sql

Во-первых, убедитесь, что вы уже добавили папку postgres bin в переменную среды «Путь» (в моем случае это папка C:\Program Files\PostgreSQL\12\bin).

Затем откройте интерпретатор команд Windows (cmd), перейдите в папку, в которой находится файл . sql, и выполните следующую команду:

pg_restore -U имя_пользователя -d database-1 backupfile.sql

Например:

pg_restore -U sam -d SamDataBase -1 SamDataBaseBackup.sql

(Он может запросить у вас пароль пользователя, поэтому убедитесь, что вы вводите его правильно, а затем нажмите Enter)

Pura vida!

Если вы создали новую базу данных с именем mydb , чтобы восстановить дамп .sql в эту базу данных с помощью psql,

 psql --file=dump.sql --username=postgres --host=localhost --port= 5432 мдб
 

пароль подскажет psql

Варианты подключения

 -h, --host=HOSTNAME хост сервера базы данных или каталог сокета (по умолчанию: "/var/run/postgresql")
  -p, --port=PORT порт сервера базы данных (по умолчанию: "5432")
  -U, --username=USERNAME имя пользователя базы данных (по умолчанию: "xyz")
  -w, --no-password никогда не запрашивать пароль
  -W, --password принудительно ввести пароль (должно происходить автоматически)
 

Если вы используете докер, этот ответ может быть полезен.

  1. Запустить контейнер
     запуск докера 
     
  2. Доступ к bash внутри контейнера
     docker exec -it  bash
     
  3. Скопируйте файл резервной копии .tar в контейнер Docker (в другом окне)
     docker cp postgres_dump.tar :/
     
  4. Восстановить резервную копию
     pg_restore -c -U <пользователь-postgres> -d <пароль> -v "postgres_dump.tar" -W
     
  5. Введите пароль

Если вы хотите сделать резервную копию ваших данных или восстановить данные из резервной копии, вы можете выполнить следующие команды:

  1. Чтобы создать резервную копию ваших данных, перейдите в каталог postgres\bin\, например C:\programfiles\postgres\10\bin\, а затем введите следующую команду:

     pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.0_after_readUpload.backup
     
  2. Чтобы восстановить данные из резервной копии, перейдите в каталог postgres\bin\, например C:\programfiles\postgres\10\bin\, а затем введите следующую команду:

     C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432  130918.резервное копирование
     

    Убедитесь, что файл резервной копии существует.

Выполните следующие 3 шага:

  1. запустить сервер postgres - sudo systemctl запустить postgresql
  2. включить то же самое - sudo systemctl включить postgresql
  3. команда восстановления - pg_restore -h localhost -p 5432 -U postgres -d old_db

при условии, что дамп находится в том же каталоге

Ссылки :

https://www.postgresqltutorial.com/postgresql-restore-database
https://askubuntu.com/questions/50621/cannot-connect-to-postgresql-on-port-5432

См. ниже пример его работы

C:/Program Files/PostgreSQL/9.4/bin\pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "newDatabase" --no-password --verbose

" C:\Users\Yogesh\Downloads\new Download\DB. backup "

0

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

sql - Как восстановить файл дампа PostgreSQL в базы данных Postgres?

спросил

Изменено
5 месяцев назад

Просмотрено
213 тысяч раз

У меня есть файл дампа с расширением . SQL (на самом деле это простой текстовый файл SQL). Я хочу восстановить его в свои созданные базы данных. Я использую pgAdmin III, и когда я использую его «Мастер восстановления», он не выделяет кнопку «Восстановить». Вместо этого ожидается расширение файла .backup .

Я пытался использовать команды оболочки для восстановления дампа, но это все равно не сработало.

Я новичок в этом. Если бы кто-нибудь мог мне помочь, я был бы обязан.

Изменить

Я использовал следующую команду для панели Shell SQL PostGres, сидя за newTestDB.

 newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql
 

По-прежнему выдавал ту же ошибку ("Отказано в доступе").

После повышения разрешений он просто показывает мне таблицы PostgreSQL по умолчанию:

 Список табличных пространств
Имя | Владелец | Расположение
-----------+----------+----------
pg_default | постгрес |
pg_global | постгрес |
(2 ряда)
 

Я не знаю, что делать для импорта/восстановления базы данных из файла SQL.

  • sql
  • postgresql
  • дамп
  • восстановление базы данных
  • дамп базы данных

3

Вы не упомянули, как была сделана ваша резервная копия, поэтому общий ответ: Обычно с помощью инструмента psql .

В зависимости от того, что pg_dump было приказано выгрузить, файл SQL может иметь разные наборы команд SQL.
Например, если вы указываете pg_dump для создания дампа базы данных с использованием --clean и --schema-only , вы не можете ожидать, что сможете восстановить базу данных из этого дампа, поскольку не будет команд SQL для копирования (или вставки, если --inserts используется ) фактические данные в таблицах. Такой дамп будет содержать только команды DDL SQL и сможет воссоздать схему, но не фактические данные.

Типичный дамп SQL восстанавливается с помощью psql :

 psql (здесь варианты подключения) database < yourbackup. sql
 

или альтернативно из сеанса psql , базы данных

 psql (варианты подключения здесь)
база данных = # \i /path/to/yourbackup.sql
 

В случае резервных копий, созданных с помощью pg_dump -Fc ("пользовательский формат"), который представляет собой не обычный файл SQL, а сжатый файл, необходимо использовать инструмент pg_restore .

Если вы работаете с Unix-подобной системой, попробуйте следующее:

 man psql
человек pg_dump
человек pg_restore
 

в противном случае взгляните на html-документы. Удачи!

11

С помощью команды pg_restore вы можете восстановить базу данных postgres

Первый открытый тип терминала

 sudo su postgres
 

Создать новую базу данных

createdb [имя базы данных] -O [владелец]

 createdb test_db [-O openerp]
 

pg_restore -d [имя базы данных] [путь к файлу дампа]

 pg_restore -d test_db /home/sagar/Download/sample_dbump
 

Дождитесь завершения восстановления базы данных.

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

Проблема с вашей попыткой ввести командную строку psql заключается в направлении косой черты:

 newTestDB- # /i E:\db-rbl-restore-20120511_Dump-20120514.sql # неверно
newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql # правильно
 

Для ясности, psql 9Команды 0036 начинаются с обратной косой черты, поэтому вместо нее нужно было поставить \i . В результате вашей опечатки произошло то, что psql игнорировал все, пока не нашел первый \ , за которым последовал db , а \db оказался командой psql для вывода таблицы . пробелы , поэтому вывод был Список табличных пространств . Это не был список «таблиц PostgreSQL по умолчанию», как вы сказали.

Кроме того, кажется, что psql ожидает, что аргумент filepath разделит каталоги с помощью косой черты независимо от ОС (таким образом, в Windows это было бы нелогично).

Стоит отметить, что ваша попытка "повышения разрешений" не имела никакого отношения к результату команды, которую вы пытались выполнить. Кроме того, вы не сказали, что вызвало предполагаемую ошибку «Отказано в доступе».

Наконец, расширение файла дампа не имеет значения, на самом деле вам даже не нужно расширение. Действительно, pgAdmin предлагает расширение .backup при выборе имени файла резервной копии, но на самом деле вы можете сделать его любым, опять же, в том числе без расширения вообще. Проблема в том, что pgAdmin , по-видимому, разрешает только «Восстановление» дампов «Пользовательский или tar» или «Каталог» (по крайней мере, это имеет место в версии приложения для MAC OS X), поэтому просто используйте psql \i , как показано выше.

4

1.открыть терминал.

2. сделайте резервную копию вашей базы данных с помощью следующей команды dinesh/db/mydb. backup

имя исходной базы данных - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-password --format custom --blobs --file "/home/dinesh/db/mydb.backup" "mydatabase"

3. Восстановите файл mydb.backup в место назначения.

ваш целевой сервер - localhost

имя вашей целевой базы данных - mydatabase

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

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "СОЗДАТЬ БАЗУ ДАННЫХ mydatabase"

восстановить резервную копию.

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db /mydb.backup"

Объединив советы от MartinP и пользователя 664833, я также смог заставить его работать. Предостережение заключается в том, что вход в psql из графического инструмента pgAdmin с помощью выбора «Плагины. .. Консоль PSQL» устанавливает учетные данные и уровень разрешений для сеанса psql, поэтому у вас должны быть права администратора или CRUD для таблицы и, возможно, также права администратора для БД (не об этом точно знаю). Затем команда в консоли psql будет иметь следующий вид:

 postgres=# \i буква_диска:/путь_папки/имя_файла_резервной_копии.backup
 

, где postgres=# — это приглашение psql, а не часть команды.

Файл .backup будет включать команды, использованные для создания таблицы, поэтому вы также можете получить в файле такие вещи, как команды "ALTER TABLE ...", которые выполняются, но отображаются как ошибки. Я предполагаю, что вы всегда можете удалить эти команды перед запуском восстановления, но, вероятно, лучше оставить их там, чем сожалеть, так как они вряд ли приведут к сбою восстановления данных. Но всегда проверяйте, действительно ли данные, которые вы хотите восстановить, туда попали. (Извините, если кому-то это покажется снисходительным советом, но это оплошность, которая может случиться с каждым, независимо от того, как долго он этим занимается — минутное отвлечение от коллеги, телефонный звонок и т.