我有一个扩展名为.SQL
的转储文件(实际上它是一个纯文本SQL文件)。我想将其恢复到我创建的数据库中。我正在使用pgAdmin III,当我使用其“还原向导”时,它不会突出显示“恢复”按钮。相反,它期望.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文件导入/恢复数据库。
答案 0 :(得分:46)
您没有提及备份是如何制作的,因此通用答案是:通常使用psql
工具。
根据指示转储pg_dump
的内容,SQL文件可以具有不同的SQL命令集。
例如,如果指示pg_dump
使用--clean
和--schema-only
转储数据库,则不能指望能够从该转储恢复数据库,因为没有SQL命令for COPYing(或INSERTing if --inserts
)表中的实际数据。像这样的转储只包含DDL SQL命令,并且能够重新创建模式而不是实际数据。
使用psql
恢复典型的SQL转储:
psql (connection options here) database < yourbackup.sql
或者来自psql
会话,
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。祝你好运!
答案 1 :(得分:22)
尝试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
恰好是{ {1}}列出表空间的命令,因此输出为表空间列表的原因。正如你所说,它不是“PostgreSQL默认表”的列表。
此外,似乎psql
期望psql
参数使用正斜杠来划分目录而不管操作系统(因此在Windows上这将违反直觉)。
值得注意的是,您尝试“提升权限”与您尝试执行的命令的结果无关。此外,您没有说出导致所谓的“权限被拒绝”错误的原因。
最后,转储文件的扩展名无关紧要,实际上你甚至不需要扩展名。实际上,filepath
在选择备份文件名时建议使用pgAdmin
扩展名,但实际上您可以将其设为任意内容,包括根本没有扩展名。问题是.backup
似乎只允许“自定义或tar”或“目录”转储的“恢复”(至少在应用程序的MAC OS X版本中是这种情况),所以只需使用pgAdmin
psql
命令,如上所示。
答案 2 :(得分:15)
使用 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命令
答案 3 :(得分:7)
1.打开终端。
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
创建数据库以恢复备份。
/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.backup“
答案 4 :(得分:5)
结合MartinP和user664833的建议,我也能够让它发挥作用。警告是通过选择插件从pgAdmin GUI工具输入psql ... PSQL控制台设置psql会话的凭据和权限级别,因此您必须对表具有管理员或CRUD权限,并且可能还有DB上的管理员(不要我当然知道)。然后在psql控制台中的命令将采用以下形式:
postgres=# \i driveletter:/folder_path/backupfilename.backup
其中 postgres =#是psql提示符,不是命令的一部分。
.backup文件将包含用于创建表的命令,因此您也可以获得类似&#34; ALTER TABLE ...&#34;文件中的命令被执行但报告为错误。我认为您可以在运行还原之前始终删除这些命令,但是将它们保留在那里可能比抱歉更安全,因为这些不会导致数据还原失败。但是要经常检查以确保您想要恢复的数据实际到达那里。 (对不起,如果这似乎是对任何人的光顾建议,但无论他们对这些事情有多长时间,这都会发生在他人身上的疏忽 - 片刻会让同事分心,打个电话等等,很容易忘记这一步。我在职业生涯早期使用其他数据库自己完成了这件事,并且想知道为什么我没有看到这个查询中的任何数据?&# 34;答案是数据从未实际恢复,我只是浪费了2个小时试图找出可能存在的可能存在的错误。)
答案 5 :(得分:0)
您可能需要在数据库级别设置权限,以允许架构所有者还原转储。
答案 6 :(得分:0)
我发现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
调用中使用“普通”窗口斜杠时,您可以看到它失败。
但是,两个斜杠样式如果将它们作为输入参数传递给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>