繁体   English   中英

如何将 PostgreSQL 转储文件恢复到 Postgres 数据库中?

[英]How to restore PostgreSQL dump file into Postgres databases?

我有一个扩展名为.SQL的转储文件(实际上它是一个纯文本 SQL 文件)。 我想将它恢复到我创建的数据库中。 我正在使用pgAdmin III ,当我使用它的“恢复向导”时,它没有突出显示“恢复”按钮。 相反,它需要一个.backup文件扩展名。

我尝试使用 shell 恢复转储的命令,但它仍然没有用。

我是这方面的新手。 如果有人可以帮助我,我将有义务。

编辑

坐在 newTestDB 上时,我对 PostGres 的 Shell SQL 窗格使用了以下命令。

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

它仍然给出相同的错误(“权限被拒绝”)。

提升权限后,它只显示 PostgreSQL 的默认表:

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

(2 rows)

我不知道如何从 SQL 文件导入/恢复数据库。

你没有提到你的备份是如何制作的,所以通用答案是: 通常使用psql工具。

根据指示转储的pg_dump ,SQL文件可以具有不同的SQL命令集。 例如,如果指示pg_dump使用--clean--schema-only转储数据库,则不能期望能够从该转储恢复数据库,因为没有用于COPYing的SQL命令(或者如果INSITING则为--inserts使用插入)表中的实际数据。 像这样的转储将只包含DDL SQL命令,并且能够重新创建模式而不是实际数据。

使用psql恢复典型的SQL转储:

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文档 祝好运!

尝试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似乎只允许“自定义或tar”或“目录”转储的“恢复”(至少在应用程序的MAC OS X版本中就是这种情况),所以只需使用psql \\i命令如上所示。

通过使用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命令

打开终端。

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-password --format custom --blobs --file“/ home / dinesh / db /mydb.backup“”mydatabase“

3.删除mydb.backup文件到目的地。

您的目标服务器 - localhost

目标数据库名称 - mydatabase

create database for restore backup。

/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。备份”

结合MartinP和user664833的建议,我也能够让它发挥作用。 警告是通过选择插件从pgAdmin GUI工具输入psql ... PSQL控制台设置psql会话的凭据和权限级别,因此您必须对表具有管理员或CRUD权限,并且可能还有DB上的管理员(不要我当然知道)。 然后在psql控制台中的命令将采用以下形式:

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

其中postgres =#是psql提示符,不是命令的一部分。

.backup文件将包含用于创建表的命令,因此您可能会在文件中获得“ALTER TABLE ...”命令,这些命令会被执行但报告为错误。 我想你总是可以在运行恢复之前删除这些命令,但是你可能比把握它们更安全,因为它们不会导致数据恢复失败。 但是要经常检查以确保您想要恢复的数据实际到达那里。 (对不起,如果这似乎是对任何人的光顾建议,但这是一个疏忽,任何人都可能发生这种疏忽,无论他们对这些东西有多长时间 - 一时间分散了同事,打电话等等,这很容易忘了这一步。我在职业生涯早期使用其他数据库自己完成了这项工作,并想知道“哎呀,为什么我从这个查询中看不到任何数据呢?”答案是数据从未实际恢复,我只是浪费了2个小时的尝试寻找可能存在的不存在的错误。)

您可能需要在数据库级别设置允许架构所有者还原转储的权限。

我发现psql.exe在斜线方向上非常挑剔,至少在windows上(上面看起来像)。

这是一个例子。 在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=#

当我在\\i调用中使用“普通”窗口斜杠时,您可以看到它失败。 但是如果将它们作为输入参数传递给psql.exe ,则两种斜杠样式 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>

这就是在 Windows 中恢复 Postgres 数据库时对我有用的方法。首先,右键单击命令 shell 和 select“以管理员身份运行”以避免权限被拒绝的问题。 执行相同的命令但进行一些更改:

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

如果您注意到,命令“newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql”已更改为“newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql”。 sql",在文件路径中使用 / 而不是 \ 斜杠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM