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

wn9m85ua  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(8)|浏览(249)

我有一个扩展名为.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文件导入/恢复数据库。

klr1opcd

klr1opcd1#

您没有提到您的备份是如何创建的,因此一般答案是:* 通常使用psql工具。*
根据指示pg_dump转储的内容,SQL文件可以有不同的SQL命令集。例如,如果您使用--clean--schema-only指示pg_dump转储数据库,您不能期望能够从该转储中恢复数据库,因为没有用于COPPying的SQL命令(如果使用--inserts,则为INSERT)表中的实际数据。这样的转储将只包含DDL SQL命令,并且能够重新创建方案,但不能重新创建实际数据。
使用psql还原典型的SQL转储:

psql (connection options here) database  < yourbackup.sql

或者可选地从X1 M7 N1 X会话,

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

否则,看看the html docs。祝你好运!

tzdcorbm

tzdcorbm2#

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

sy5wg1nm

sy5wg1nm3#

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命令。

kulphzqa

kulphzqa4#

1.打开终端。
2.使用以下命令备份数据库

您的PostgreSQL文件夹- /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”--无密码--格式自定义--blob--文件“/home/dinesh/db/mydb.backup”“mydatabase”

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

目标服务器- localhost
目标数据库名称- mydatabase

为还原备份创建数据库。

/opt/PostgreSQL/9.1/bin/psql -h '本地主机' -p 5432 -U postgres -c“创建数据库我的数据库”

还原备份。

/opt/PostgreSQL/9.1/bin/pg_restore --主机“本地主机”--端口5432 --用户名“postgres”--数据库名称“我的数据库”--无密码--清除“/home/dinesh/db/mydb.backup”

cgyqldqp

cgyqldqp5#

结合MartinP和user 664833的建议,我也能够让它工作。警告是,通过选择Plugins... PSQLConsole从pgAdminGUI工具进入psql将设置psql会话的凭据和权限级别,因此您必须对表具有Admin或CRUD权限,还可能对DB具有Admin权限(不确定)。psql控制台中的命令将采用以下形式:

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

其中,postgres=# 是psql提示符,不是命令得一部分.
.backup文件将包含用于创建表的命令,因此您可能还会在文件中看到“ALTER TABLE...”命令,这些命令在执行后会报告为错误。我认为您可以在运行恢复之前删除这些命令,但将它们保留在那里可能会更安全。因为这些不太可能导致数据恢复失败。但请始终检查以确保您要重新存储的数据确实到达了那里。(如果这对任何人来说都像是一个居高临下的建议,那我很抱歉,但这是一个可能发生在任何人身上的疏忽,不管他们在这方面做了多久--从同事那里分心片刻,在我职业生涯的早期,我自己也曾使用其他数据库执行过这一步骤,当时我很想知道“哎呀,为什么我没有看到从这个查询返回的任何数据?”答案是数据实际上从来没有得到恢复,我只是浪费了2个小时试图找出不存在的可疑错误。)

pgpifvop

pgpifvop6#

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

zte4gxcn

zte4gxcn7#

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

sc4hvdpw8#

这是我在Windows中恢复Postgres数据库时的工作方式。开始,右键单击命令shell并选择“以管理员身份运行”以避免权限被拒绝的问题。执行相同的命令,但进行一些更改:

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”,文件路径中使用的是/而不是\斜杠。

相关问题