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

如何将PostgreSQL转储文件恢复到Postgres数据库中?,sql,postgresql,dump,database-restore,database-dump,Sql,Postgresql,Dump,Database Restore,Database Dump,我有一个扩展名为.SQL的转储文件(实际上它是一个纯文本SQL文件)。我想将其恢复到我创建的数据库中。我正在使用,当我使用其“还原向导”时,它不会突出显示“还原”按钮。相反,它需要一个.backup文件扩展名 我尝试使用shell命令来恢复转储,但仍然不起作用 我是这方面的新手。如果有人能帮助我,我将不胜感激 编辑 坐在newTestDB旁时,我对PostGres的Shell SQL窗格使用了以下命令 newTestDB-# \i E:\db-rbl-restore-20120511_Dump-

我有一个扩展名为
.SQL
的转储文件(实际上它是一个纯文本SQL文件)。我想将其恢复到我创建的数据库中。我正在使用,当我使用其“还原向导”时,它不会突出显示“还原”按钮。相反,它需要一个
.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
工具

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

使用
psql
还原典型的SQL转储:

psql (connection options here) database  < yourbackup.sql
如果使用
pg_dump-Fc
(“自定义格式”)进行备份,这不是一个普通的SQL文件,而是一个压缩文件,则需要使用
pg_restore
工具

如果您正在使用类似unix的系统,请尝试以下操作:

man psql
man pg_dump
man pg_restore

否则,请看一看。祝你好运

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

尝试使用
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命令即可。

我发现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
调用中使用“普通”windows斜杠时,您可以看到它失败了。 但是,如果将它们作为输入参数传递给
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>

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--主机'192.168.1.111'--端口5432--用户名“postgres”--无密码--格式自定义--blobs--文件“/home/dinesh/db/mydb.backup”“mydatabase”

3.将mydb.backup文件还原到目标。

您的目标服务器-本地主机

您的目标数据库名称-mydatabase

创建数据库以还原备份。

/opt/PostgreSQL/9.1/bin/psql-h'localhost'-p 5432-U postgres-c“创建数据库mydatabase”

恢复备份。


/opt/PostgreSQL/9.1/bin/pg_restore--host'localhost'--port 5432--username“postgres”--dbname“mydatabase”--无密码--clean“/home/dinesh/db/mydb.backup”

结合MartinP和user664833的建议,我也能够让它正常工作。需要注意的是,通过选择插件从pgAdmin GUI工具输入psql…psql控制台设置psql会话的凭据和权限级别,因此您必须在表上具有Admin或CRUD权限,也可能在DB上具有Admin权限(不确定)。psql控制台中的命令将采用以下形式:

postgres=# \i driveletter:/folder_path/backupfilename.backup
其中,postgres=#是psql提示符,而不是命令的一部分

.backup文件将包含用于创建表的命令,因此您也可能会得到类似“ALTERTABLE…”文件中已执行但报告为错误的命令。我认为您可以在运行还原之前删除这些命令,但将它们保留在其中可能比保留在其中更安全,因为这些命令可能不会导致数据还原失败。但请始终检查以确保要还原的数据确实已到达那里。(如果这看起来像是在光顾advi,那么很抱歉
postgres=# \i driveletter:/folder_path/backupfilename.backup
sudo su postgres
createdb test_db [-O openerp]
pg_restore -d test_db /home/sagar/Download/sample_dbump