How to restore PostgreSQL dump file into Postgres databases?
我有一个带有
我尝试使用shell命令来恢复转储,但它仍然无法正常工作。
我是新手。 如果有人可以帮助我,我将被迫。
编辑
我坐在newTestDB时使用了以下命令到PostGres的Shell SQL窗格。
1 | newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql |
它仍然给出了相同的错误("权限被拒绝")。
提升权限后,它只显示PostgreSQL的默认表:
1 2 3 4 5 6 7 | List OF tablespaces Name | Owner | Location -----------+----------+---------- pg_default | postgres | pg_global | postgres | (2 ROWS) |
我不知道如何从SQL文件导入/恢复数据库。
您没有提到备份是如何制作的,因此通用答案是:通常使用
根据指示转储的
例如,如果指示
使用
1 | psql (connection options here) DATABASE < yourbackup.sql |
或者从
1 2 | psql (connection options here) DATABASE DATABASE=# \i /path/TO/yourbackup.sql |
如果使用
如果您正在使用unix,请尝试以下方法:
1 2 3 | man psql man pg_dump man pg_restore |
否则,看一下html文档。祝好运!
尝试
1 2 | newTestDB-# /i E:\db-rbl-restore-20120511_Dump-20120514.sql # incorrect newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql # correct |
要清楚,
此外,似乎
值得注意的是,您"提升权限"的尝试与您尝试执行的命令的结果无关。此外,您没有说出导致所谓的"权限被拒绝"错误的原因。
最后,转储文件的扩展名无关紧要,实际上你甚至不需要扩展名。实际上,
通过使用pg_restore命令,您可以恢复postgres数据库
首先打开终端类型
1 | sudo su postgres |
创建新数据库
createdb [数据库名称] -O [所有者]
1 | createdb test_db [-O openerp] |
pg_restore -d [数据库名称] [转储文件的路径]
1 | pg_restore -d test_db /home/sagar/Download/sample_dbump |
等待数据库恢复完成。
请记住,转储文件应具有读取,写入和执行访问权限,因此您可以应用chmod命令
打开终端。
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 --host'192.168.1.111' - port 5432 --username"postgres" - no-password --format custom --blobs --file"/ home / dinesh / db /mydb.backup""mydatabase"
3.删除mydb.backup文件到目的地。
您的目标服务器 - localhost
目标数据库名称 - mydatabase
create database for restore backup。
/opt/PostgreSQL/9.1/bin/psql -h'localhost'-p 5432 -U postgres -c"CREATE DATABASE mydatabase"
恢复备份。
/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权限,也可能在数据库上具有管理员权限(不要我当然知道)。然后在psql控制台中的命令将采用以下形式:
1 | postgres=# \i driveletter:/folder_path/backupfilename.backup |
其中postgres =#是psql提示符,不是命令的一部分。
.backup文件将包含用于创建表的命令,因此您可能会在文件中获得"ALTER TABLE ..."命令,这些命令会被执行但报告为错误。我想你总是可以在运行恢复之前删除这些命令,但是你可能比把握它们更安全,因为它们不会导致数据恢复失败。但是要经常检查以确保您想要恢复的数据实际到达那里。 (对不起,如果这似乎是对任何人的光顾建议,但这是一个疏忽,任何人都可能发生这种疏忽,无论他们对这些东西有多长时间 - 一时间分散了同事,打电话等等,这很容易忘了这一步。我在职业生涯早期使用其他数据库自己完成了这项工作,并想知道"哎呀,为什么我从这个查询中看不到任何数据呢?"答案是数据从未实际恢复,我只是浪费了2个小时的尝试寻找可能存在的不存在的错误。)
我发现psql.exe在斜线方向上非常挑剔,至少在windows上(上面看起来像)。
这是一个例子。在cmd窗口中:
1 2 3 4 5 6 7 8 9 | 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=# |
当我在
但是,如果将它们作为输入参数传递给
1 2 3 4 5 6 7 | 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> |
您可能需要在数据库级别设置允许架构所有者还原转储的权限。