Восстановление базы данных PostgreSQL

  • Михаил
  • 12 мин. на прочтение
  • 123
  • 19 Feb 2019
  • 01 Mar 2023

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

  • Использование psqlдля восстановления простого файла сценария SQL, созданного  инструментами pg_dumpи  pg_dumpall.
  • Использование  pg_restoreдля восстановления файла tar и формата каталога, созданного инструментом  pg_dump.

Как восстановить базы данных с помощью psql

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

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

psql -U username -f backupfile.sql

Если вы хотите остановить восстановление базы данных в случае ошибок, вы добавляете --set ON_ERROR_STOP=on option:

psql -U username --set ON_ERROR_STOP=on -f backupfile

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

psql -U username -d database_name -f objects.sql

Делаем восстановление на удаленном сервере

C:\"Program Files"\PostgreSQL\14\bin\psql -h 10.10.11.18 -p 5432 -d BASE -U postgres -W -f D:\backup\postgres\BASE.sql 

 

Как восстановить базы данных с помощью pg_restore

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

  • Позволяет  pg_restoreвыполнять параллельное восстановление, используя   -jпараметр, указывающий количество потоков для восстановления. Каждый поток одновременно восстанавливает отдельную таблицу, что значительно ускоряет процесс. В настоящее время  pg_restoreподдерживается этот параметр только для пользовательского формата файла.
  • Также  pg_restoreпозволяет восстанавливать определенные объекты базы данных в файле резервной копии, содержащем полную базу данных.
  • Можно  pg_restoreвзять резервную копию базы данных в старой версии и восстановить ее в новой версии.

Давайте создадим новую базу данных с именем newdvdrentalдля практики с этим  pg_restoreинструментом.

CREATE DATABASE newdvdrental;

Вы можете восстановить dvdrentalбазу данных в tarформате файла, сгенерированном инструментом  pg_dumpв руководстве по резервному копированию базы данных PostgreSQL , используя следующую команду:

pg_restore --dbname=newdvdrental --verbose c:\pgbackup\dvdrental.tar

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

pg_restore --dbname=dvdrental --create --verbose c:\pgbackup\dvdrental.tar

Начиная с PostgreSQL 9.2, вы можете использовать  --sectionопцию восстановления только структуры таблицы. Это позволяет использовать новую базу данных в качестве шаблона для создания других баз данных.

Сначала создайте новую базу данных с именем dvdrental_tpl.

CREATE DATABASE dvdrental_tpl;

Во-вторых, восстановите структуру таблицы только из dvdrental.tarфайла резервной копии с помощью следующей команды:

pg_restore --dbname=dvdrental_tpl --section=pre-data  c:\pgbackup\dvdrental.tar