Usm*_*man 46 sql postgresql dump database-restore database-dump
我有一个带.SQL
扩展名的转储文件(实际上它是一个纯文本的SQL文件).我想将其恢复到我创建的数据库中.我正在使用pgAdmin III,当我使用它的"还原向导"时,它不会突出显示"恢复"按钮.相反,它期待.backup
文件扩展名.
我尝试使用shell命令来恢复转储,但它仍然无法正常工作.
我是新手.如果有人可以帮助我,我将被迫.
我坐在newTestDB时使用了以下命令到PostGres的Shell SQL窗格.
newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql
Run Code Online (Sandbox Code Playgroud)
它仍然给出了相同的错误("权限被拒绝").
提升权限后,它只显示PostgreSQL的默认表:
List of tablespaces
Name | Owner | Location
-----------+----------+----------
pg_default | postgres |
pg_global | postgres |
(2 rows)
Run Code Online (Sandbox Code Playgroud)
我不知道如何从SQL文件导入/恢复数据库.
dsc*_*ulz 46
您没有提到备份是如何制作的,因此通用答案是:通常使用该psql
工具.
根据pg_dump
指示转储的内容,SQL文件可以具有不同的SQL命令集.例如,如果您指示pg_dump
使用--clean
和转储数据库--schema-only
,则不能期望能够从该转储恢复数据库,因为没有用于COPYing的SQL命令(或者如果--inserts
使用INSERTing )表中的实际数据.像这样的转储将只包含DDL SQL命令,并且能够重新创建模式而不是实际数据.
通过以下方式恢复典型的SQL转储psql
:
psql (connection options here) database < yourbackup.sql
Run Code Online (Sandbox Code Playgroud)
或者从psql
会话中,
psql (connection options here) database
database=# \i /path/to/yourbackup.sql
Run Code Online (Sandbox Code Playgroud)
如果使用pg_dump -Fc
("自定义格式")进行备份(不是纯SQL文件而是压缩文件),则需要使用该pg_restore
工具.
如果您正在使用unix,请尝试以下方法:
man psql
man pg_dump
man pg_restore
Run Code Online (Sandbox Code Playgroud)
否则,看一下html文档.祝好运!
use*_*833 22
尝试psql
命令行的问题是斜杠的方向:
newTestDB-# /i E:\db-rbl-restore-20120511_Dump-20120514.sql # incorrect
newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql # correct
Run Code Online (Sandbox Code Playgroud)
要清楚,psql
命令以反斜杠开头,所以你应该放弃\i
.发生了什么事你错字的结果是,psql
忽略一切,直到找到第一\
,这正好是其次db
,而\db
恰好是psql
上市的命令表空间,因此为什么输出是一个表空间的列表.正如你所说,它不是"PostgreSQL默认表"的列表.
此外,似乎psql
期望filepath
参数使用正斜杠来划分目录而不管操作系统(因此在Windows上这将是违反直觉的).
值得注意的是,您"提升权限"的尝试与您尝试执行的命令的结果无关.此外,您没有说出导致所谓的"权限被拒绝"错误的原因.
最后,转储文件的扩展名无关紧要,实际上你甚至不需要扩展名.实际上,pgAdmin
建议.backup
在选择备份文件名时进行扩展,但实际上你可以随心所欲地制作它,包括根本没有扩展名.的问题是,pgAdmin
似乎只允许一个"自定义或焦油"或"目录"转储的"恢复"(至少这是在应用程序的MAC OS X版本的情况下),所以只需要使用psql
\i
命令,如上所示.
Sag*_*ise 17
通过使用pg_restore命令,您可以恢复postgres数据库
首先打开终端类型
sudo su postgres
Run Code Online (Sandbox Code Playgroud)
创建新数据库
createdb [数据库名称] -O [所有者]
createdb test_db [-O openerp]
Run Code Online (Sandbox Code Playgroud)
pg_restore -d [数据库名称] [转储文件的路径]
pg_restore -d test_db /home/sagar/Download/sample_dbump
Run Code Online (Sandbox Code Playgroud)
等待数据库恢复完成.
请记住,转储文件应具有读取,写入和执行访问权限,因此您可以应用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密码--clean"/家/迪内希/ DB/MYDB.备份"
结合MartinP和user664833的建议,我也能够让它发挥作用.警告是通过选择插件从pgAdmin GUI工具输入psql ... PSQL控制台设置psql会话的凭据和权限级别,因此您必须对表具有管理员或CRUD权限,并且可能还有DB上的管理员(不要我当然知道).然后在psql控制台中的命令将采用以下形式:
postgres=# \i driveletter:/folder_path/backupfilename.backup
Run Code Online (Sandbox Code Playgroud)
其中postgres =#是psql提示符,不是命令的一部分.
.backup文件将包含用于创建表的命令,因此您可能会在文件中获得"ALTER TABLE ..."命令,这些命令会被执行但报告为错误.我想你总是可以在运行恢复之前删除这些命令,但是你可能比把握它们更安全,因为这些不会导致数据恢复失败.但是要经常检查以确保您想要恢复的数据实际到达那里.(对不起,如果这似乎是对任何人的光顾建议,但这是一个疏忽,任何人都可能发生这种疏忽,无论他们对这些东西有多长时间 - 一时间分散了同事,打电话等等,这很容易忘了这一步.我在职业生涯早期使用其他数据库自己完成了这项工作,并想知道"哎呀,为什么我从这个查询中看不到任何数据呢?"答案是数据从未实际恢复,我只是浪费了2个小时的尝试寻找可能存在的不存在的错误.)