如何将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