Восстановить файл резервной копии postgres с помощью командной строки? - PullRequest
210 голосов
/ 28 апреля 2010

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

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

Ответы [ 19 ]

264 голосов
/ 28 апреля 2010

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

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

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

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

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

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

psql -U <username> -d <dbname> -1 -f <filename>.sql

или

pg_restore -U <username> -d <dbname> -1 <filename>.dump

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

153 голосов
/ 28 мая 2012

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

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 - подробный, -f - имя файла резервной копии

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

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

важно установить -h localhost - опция

64 голосов
/ 31 августа 2013

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

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

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

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

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

   pg_restore -d database_name -U username -C backup.dump

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

pg_dump / PSQL

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

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

pg_dump -U username -f backup.sql database_name

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

psql -d database_name -f backup.sql
44 голосов
/ 13 сентября 2014

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

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

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

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

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

29 голосов
/ 24 августа 2016

Ниже приведена моя версия 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 имя базы данных

13 голосов
/ 14 октября 2016

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

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

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

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

resore

gunzip -c mydb.pgsql.gz | psql dbname -U user

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

8 голосов
/ 25 февраля 2014
Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}
6 голосов
/ 11 октября 2013

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

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

ваш postgres bin - / opt / PostgreSQL /9.1 / bin /

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

расположение и имя файла резервной копии - /home/dinesh/db/mydb.backup

ваша исходная база данныхname - mydatabase

/ opt / PostgreSQL / 9.1 / bin / pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-пароль - отформатировать пользовательские --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 "CREATE DATABASE mydatabase"

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

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

3 голосов
/ 19 ноября 2018

попробовать:

pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>
3 голосов
/ 30 мая 2017

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

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