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


296

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

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

Ответы:


367

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

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

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

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

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

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

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

или

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

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


3
IME вы практически всегда хотите восстановить в базу данных, которая была недавно создана из template0. В противном случае, если вы сделали что-то вроде активации plpgsql в template1, процесс восстановления попытается сделать это снова, и предложенный вами переключатель -1 означает, что вся транзакция завершится неудачно. Таким образом, что-то вроде «createb -T template0 seo2», за которым следует «pg_restore -v -d seo2 seo.pg», чтобы восстановить seo.pg (сделанный из базы данных seo) в новую базу данных seo2. Если ваш файл резервной копии - просто файл .sql, вы можете вручную удалить конфликтующие биты.
araqnid

61
Вы не можете иметь -dи -fв то же время. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner

8
В версии 9.2 опция «-f» указывает выходной файл, а не файл дампа (и это, вероятно, означает то же самое в более ранних версиях).
Дэвид Резник

4
Что касается cannot be used together, см. Здесь: stackoverflow.com/questions/27882070/…
Абдулл

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

217

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

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 - параметр


2
Я хотел бы отметить , что , прежде чем выполнить эти команды , которые должны быть расположены в PosgreSQL бен папке. Например, в Windows (если вы установили его в папку по умолчанию) это будет C: \ Program Files \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl

90

Вам может потребоваться войти в систему 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 

Переключатель -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

Я использовал команду "psql -d database_name -f backup.sql", чтобы восстановить базу данных, которую я сбросил из dokku в DigitalOcean. Работал отлично.
NineBlindEyes

1
при использовании psql, если ваш пользователь (например, postgresимеет) установлен пароль, -Wследует использовать опцию. Например, в Ubuntu без каких- su postgresлибо действий с терминала $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlэто команда, которая работала для меня, чтобы восстановить мою резервную копию на моем локальном хосте. Обратите внимание, что -hопция необходима.
Джинеш Гоэль

@JiggneshhGohel Как сказано в руководстве: -Wопция никогда не бывает существенной. pg_dumpавтоматически запросит пароль, если сервер требует аутентификацию по паролю. Также вы можете использовать PGPASSWORDпеременную env, если вы используете простые текстовые пароли. -hнеобходим, если значение по умолчанию PGHOSTне применимо. Эти параметры являются общими для многих утилит PostgreSQL, поэтому не обязательно отвечать на этот вопрос (это сильно зависит от вашей настройки).
Томбарт

@ Томбарт, твой второй вариант pg_dump/psql- работа для меня. но 1-я часть pg_dump/pg_restoreне работает для меня на восстановление. Спасибо.
Анжан Бисвас

@AnjanBiswas Первый вариант - использование сжатого архива, для которого потребуется больше процессоров, но файл резервной копии будет занимать меньше места на диске. Вам просто нужно выбрать подходящее сжатие, например-Fc
Томбарт

60

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

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

ВОССТАНОВИТЬ:

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

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


31

Ниже моя версия, 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
Говинд Сингх, почему вы отредактировали мой ответ? ваши изменения не приносят ничего нового ..
Яхор М

1
my_new_databaseдолжен уже существовать при использовании psql, не?
Elmex80s

22

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

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

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

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

восстановить

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

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


1
Для Ubuntu вы можете использовать: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlЧтобы получить разрешения для работы с базой данных. Также обратите внимание на --cleanфлаг при сбросе, который будет стирать все существующие данные, может пригодиться.
Себастьян

Работает отличное и аккуратное решение для меня. Спасибо!
Нам G VU


8

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

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

Спасибо, --no-ownerдействительно помог мне.
Бонафернандо

7

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

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

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

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

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

ваше имя базы данных источника - 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 "" моя база данных "

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. резервное копирование"


4

Если вы создаете резервную копию с помощью 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. Проверьте процесс восстановления

4

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

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

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

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

<database_name>-# \i <path_to_.dump_file>


3

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

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

psql dbname < infile

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

psql dbname < infile username


2

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

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

psql -h localhost -p 5432 -U postgres <резервный файл

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


Вы понимаете, что пропустили часть имени базы данных, и она будет жаловаться на то, что база данных назначения не существует?
Пере

2

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

sudo su - yourdbuser
psql
\i yourbackupfile

2

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

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

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

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


1

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

mv database_dump /tmp

во временный каталог, а затем побежал

su -u postgres
cd /tmp
pg_restore database_dump

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


1

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

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

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


1

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

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

Я получил файл дампа и должен был восстановить его.

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

pg_restore: error: input file appears to be a text format dump. Please use psql.

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

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

0

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

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

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_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 <C:\ngb.130918.backup

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


-3

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

C: / Program Files / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 - имя пользователя "postgres" --dbname "newDatabase" --no-пароль --verbose

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.