我有一个扩展名为.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文件导入/恢复数据库。
8条答案
按热度按时间klr1opcd1#
您没有提到您的备份是如何创建的,因此一般答案是:* 通常使用
psql
工具。*根据指示
pg_dump
转储的内容,SQL文件可以有不同的SQL命令集。例如,如果您使用--clean
和--schema-only
指示pg_dump
转储数据库,您不能期望能够从该转储中恢复数据库,因为没有用于COPPying的SQL命令(如果使用--inserts
,则为INSERT)表中的实际数据。这样的转储将只包含DDL SQL命令,并且能够重新创建方案,但不能重新创建实际数据。使用
psql
还原典型的SQL转储:或者可选地从X1 M7 N1 X会话,
在使用
pg_dump -Fc
(“自定义格式”)进行备份的情况下,它不是普通的SQL文件,而是压缩文件,您需要使用pg_restore
工具。如果您正在开发类Unix的,请尝试以下操作:
否则,看看the html docs。祝你好运!
tzdcorbm2#
使用pg_restore命令可以恢复postgres数据库
第一个开放终端类型
创建新数据库
createdb [数据库名称] -O [所有者]
pg_restore -d [数据库名称] [转储文件的路径]
等待数据库还原完成。
请记住,转储文件应具有读取、写入和执行访问权限,以便您可以应用chmod命令
sy5wg1nm3#
在
psql
命令行中尝试的问题在于斜杠的方向:为了清楚起见,
psql
命令以反斜杠开头,因此应该输入\i
。由于您的输入错误,psql
忽略了所有内容,直到找到第一个\
,它后面碰巧跟有db
,而\db
恰好是用于列出 * 表空间 * 的psql
命令。因此输出结果是一个表空间列表,而不是您所说的“PostgreSQL默认表”列表。此外,
psql
似乎期望filepath
参数使用正斜杠来分隔目录,而不管操作系统是什么(因此在Windows上,这将是违反直觉的)。值得注意的是,您尝试“提升权限”与您尝试执行的命令的结果无关。此外,您没有说明是什么原因导致了所谓的“权限被拒绝”错误。
最后,转储文件的扩展名并不重要,事实上您甚至不需要扩展名。实际上,
pgAdmin
建议在选择备份文件名时使用.backup
扩展名,但实际上您可以将其设置为任何您想要的扩展名,同样,包括根本没有扩展。问题是pgAdmin
似乎只允许“自定义或tar”或“目录”转储的“恢复(至少在MAC OS X版本的应用程序中是这样的),所以只需使用如上所示的psql
\i
命令。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”
cgyqldqp5#
结合MartinP和user 664833的建议,我也能够让它工作。警告是,通过选择Plugins... PSQLConsole从pgAdminGUI工具进入psql将设置psql会话的凭据和权限级别,因此您必须对表具有Admin或CRUD权限,还可能对DB具有Admin权限(不确定)。psql控制台中的命令将采用以下形式:
其中,postgres=# 是psql提示符,不是命令得一部分.
.backup文件将包含用于创建表的命令,因此您可能还会在文件中看到“ALTER TABLE...”命令,这些命令在执行后会报告为错误。我认为您可以在运行恢复之前删除这些命令,但将它们保留在那里可能会更安全。因为这些不太可能导致数据恢复失败。但请始终检查以确保您要重新存储的数据确实到达了那里。(如果这对任何人来说都像是一个居高临下的建议,那我很抱歉,但这是一个可能发生在任何人身上的疏忽,不管他们在这方面做了多久--从同事那里分心片刻,在我职业生涯的早期,我自己也曾使用其他数据库执行过这一步骤,当时我很想知道“哎呀,为什么我没有看到从这个查询返回的任何数据?”答案是数据实际上从来没有得到恢复,我只是浪费了2个小时试图找出不存在的可疑错误。)
pgpifvop6#
您可能需要在数据库级别设置权限,以允许架构所有者还原转储。
zte4gxcn7#
我发现psql.exe对斜线方向相当挑剔,至少在windows上是这样(上面看起来就像)。
下面是一个示例。在cmd窗口中:
当我在
\i
调用中使用“normal”窗口斜杠时,你可以看到它失败了。但是,如果你将它们作为输入参数传递给psql.exe
,* 两种 * 斜杠样式都可以工作,例如:sc4hvdpw8#
这是我在Windows中恢复Postgres数据库时的工作方式。开始,右键单击命令shell并选择“以管理员身份运行”以避免权限被拒绝的问题。执行相同的命令,但进行一些更改:
如果您注意到,命令“newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql”已更改为“newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql”,文件路径中使用的是/而不是\斜杠。