我有一个带有 .SQL
扩展名的转储文件(实际上它是一个纯文本SQL文件) . 我想将其恢复到我创建的数据库中 . 我正在使用pgAdmin III,当我使用"Restore Wizard"时,它没有突出显示按钮"Restore" . 相反,它期待 .backup
文件扩展名 .
我尝试使用shell命令来恢复转储,但它仍然无法正常工作 .
我是新手 . 如果有人可以帮助我,我将被迫 .
编辑
我坐在newTestDB时使用了以下命令到PostGres的Shell SQL窗格 .
newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql
它仍然给出了相同的错误(“Permission Denied”) .
提升权限后,它只显示PostgreSQL的默认表:
List of tablespaces
Name | Owner | Location
-----------+----------+----------
pg_default | postgres |
pg_global | postgres |
(2 rows)
我不知道如何从SQL文件导入/恢复数据库 .
7 回答
您没有提到备份是如何制作的,因此通用答案是:通常使用
psql
工具 .根据
pg_dump
被指示转储的内容,SQL文件可以具有不同的SQL命令集 . 例如,如果指示pg_dump
使用--clean
和--schema-only
转储数据库,则无法期望能够从该转储恢复数据库,因为没有用于COPYing的SQL命令(或者如果使用--inserts
则INSERTing)表格中的数据 . 像这样的转储将只包含DDL SQL命令,并且能够重新创建模式而不是实际数据 .使用
psql
恢复典型的SQL转储:或者从
psql
会话,如果使用
pg_dump -Fc
("custom format")进行备份(不是纯SQL文件而是压缩文件),则需要使用pg_restore
工具 .如果您正在使用unix,请尝试以下方法:
否则,看看the html docs . 祝好运!
尝试
psql
命令行的问题是斜杠的方向:要清楚,
psql
命令以反斜杠开头,所以你应该改为放置\i
. 由于你的拼写错误导致psql
忽略了所有内容,直到找到第一个\
,恰好后面是db
,而\db
恰好是列出表空间的psql
命令,因此输出为表空间列表的原因 . 正如你所说,它不是"default tables of PostgreSQL"的清单 .此外,似乎
psql
期望filepath
参数使用正斜杠分隔目录而不管操作系统(因此在Windows上这将是违反直觉的) .值得注意的是,您“提升权限”的尝试与您尝试执行的命令的结果无关 . 此外,您没有说出导致所谓的“权限被拒绝”错误的原因 .
最后,转储文件的扩展名无所谓,实际上你甚至不需要扩展名 . 实际上,
pgAdmin
在选择备份文件名时建议使用.backup
扩展,但实际上你可以实现任何你想要的扩展,包括根本没有扩展名 . 问题是pgAdmin
似乎只允许"Restore"或"Directory"转储(至少在应用程序的MAC OS X版本中就是这种情况),所以只需使用psql
\i
命令,如上所示 .通过使用 pg_restore 命令,您可以恢复postgres数据库
首先打开终端类型
创建新数据库
createdb [database name] -O [owner]
pg_restore -d [Database Name] [path of dump file]
等待数据库恢复完成 .
Remember that dump file should have read, write, execute access, so for that you can apply chmod command
1.open the terminal.
2.backup your database with following command
你的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.restore mydb.backup file into destination.
您的目标服务器 - localhost
目标数据库名称 - mydatabase
create database for restore the backup.
/opt/PostgreSQL/9.1/bin/psql -h'localhost'-p 5432 -U postgres -c“CREATE DATABASE mydatabase”
restore the backup.
/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 =#是psql提示符,不是命令的一部分 .
.backup文件将包含用于创建表的命令,因此您可能会在文件中获得“ALTER TABLE ...”命令,这些命令会被执行但报告为错误 . 我想你总能删除这些命令在运行恢复之前,但你可能比抱歉更安全,因为这些命令不会导致数据恢复失败 . 但是要经常检查以确保您想要恢复的数据实际到达那里 . (对不起,如果这似乎是对任何人的光顾建议,但这是一个疏忽,任何人都可能发生这种情况,无论他们对这些东西有多长时间 - 一时间分散了同事的注意力,电话等等,这很容易忘了这一步 . 我在职业生涯早期使用其他数据库自己做了,并想知道“哎呀,为什么我从这个查询中看不到任何数据?”答案是数据从未实际恢复,我只是浪费了2个小时的尝试寻找可能存在的不存在的错误 . )
您可能需要在数据库级别设置允许架构所有者还原转储的权限 .
我发现psql.exe在斜线方向上非常挑剔,至少在windows上(上面看起来像) .
这是一个例子 . 在cmd窗口中:
当我在
\i
调用中使用"normal" windows斜杠时,您可以看到它失败 . 但是,如果将它们作为输入参数传递给psql.exe
,则两种斜杠样式都有效,例如: