Подтвердить что ты не робот

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

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

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

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

Изменить

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

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

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

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

      List of tablespaces
Name       |  Owner   | Location
-----------+----------+----------
pg_default | postgres |
pg_global  | postgres |

(2 rows)

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

4b9b3361

Ответ 1

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

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

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

psql (connection options here) database  < yourbackup.sql

или, альтернативно, из сеанса psql,

psql (connection options here) database
database=# \i /path/to/yourbackup.sql

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

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

man psql
man pg_dump
man pg_restore

в противном случае, посмотрите html docs. Удачи!

Ответ 2

Проблема с вашей попыткой командной строки psql - это направление косой черты:

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

Чтобы быть ясным, команды psql начинаются с обратного слэша, поэтому вместо этого нужно поставить \i. Что произошло в результате вашей опечатки, так это то, что psql игнорирует все, пока не найдет первый \, за которым следует db, а \db - это команда psql для перечисления табличных пространств, поэтому выход был списком табличных пространств. Это был не список "таблиц по умолчанию PostgreSQL", как вы сказали.

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

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

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

Ответ 3

Используя команду 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

Ответ 4

1. запустите терминал.

2.Нажмите на свою базу данных следующую команду

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

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

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

ваше имя источника db - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 - имя пользователя "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 "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"

Ответ 5

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

postgres=# \i driveletter:/folder_path/backupfilename.backup

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

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

Ответ 6

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

Ответ 7

Я нахожу, что psql.exe довольно разборчив с направлением косой черты, по крайней мере, на окнах (что выглядит выше).

Вот пример. В окне cmd:

C:\Program Files\PostgreSQL\9.2\bin>psql.exe -U postgres
psql (9.2.4)
Type "help" for help.

postgres=# \i c:\temp\try1.sql    
c:: Permission denied
postgres=# \i c:/temp/try1.sql
CREATE TABLE
postgres=#

Вы можете видеть, что это терпит неудачу, когда я использую "нормальные" слэши Windows при вызове \i. Однако оба стиля слэша работают, если вы передаете их в качестве входных параметров psql.exe, например:

C:\Program Files\PostgreSQL\9.2\bin>psql.exe -U postgres -f c:\TEMP\try1.sql
CREATE TABLE

C:\Program Files\PostgreSQL\9.2\bin>psql.exe -U postgres -f c:/TEMP/try1.sql
CREATE TABLE

C:\Program Files\PostgreSQL\9.2\bin>