如何将 PostgreSQL 转储文件还原到 Postgres 数据库中



我有一个扩展名为.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文件导入/还原数据库该怎么做。

您没有提到备份是如何进行的,因此通用答案是:通常使用psql工具。

根据指示转储pg_dump的内容,SQL 文件可以具有不同的 SQL 命令集。例如,如果您指示pg_dump使用 --clean--schema-only 转储数据库,则不能期望能够从该转储中恢复数据库,因为不会有用于复制(或使用--inserts则插入)表中实际数据的 SQL 命令。像这样的转储将只包含 DDL SQL 命令,并且能够重新创建架构,但不能重新创建实际数据。

典型的 SQL 转储使用 psql 还原:

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

否则,请查看 HTML 文档。祝你好运!

通过使用pg_restore命令,您可以恢复 postgres 数据库

首款开放式端子类型

sudo su postgres

创建新数据库

已创建b [数据库名称] -O [所有者]

createdb test_db [-O openerp]

pg_restore -d [数据库名称] [转储文件的路径]

pg_restore -d test_db /home/sagar/Download/sample_dbump

等待数据库恢复完成。

请记住,转储文件应该具有读取,写入,执行访问权限,以便您可以应用chmod命令

您尝试使用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恰好是列出表空间psql命令,因此输出是表空间列表。它不是你所说的"PostgreSQL的默认表"列表。

此外,似乎psql希望filepath参数使用正斜杠分隔目录,而不管操作系统如何(因此在 Windows 上这是违反直觉的)。

值得注意的是,您尝试"提升权限"与您尝试执行的命令的结果无关。另外,您没有说是什么导致了所谓的"权限被拒绝"错误。

最后,转储文件上的扩展名无关紧要,实际上您甚至不需要扩展名。事实上,pgAdmin建议在选择备份文件名时采用.backup扩展名,但您实际上可以根据需要进行更改,包括根本没有扩展名。问题是pgAdmin似乎只允许"恢复"自定义或tar"或"目录"转储(至少在MAC OS X版本的应用程序中是这种情况),因此只需使用psql i命令如上所示。

  1. 打开终端。

  2. 使用以下命令备份数据库:

您的邮政垃圾桶 - /opt/PostgreSQL/9.1/bin/

源数据库服务器 - 192.168.1.111

备份文件的位置和名称 - /home/dinesh/db/mydb.backup

您的源数据库名称 - 我的数据库

/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"
  1. mydb.backup文件还原到目标。

您的目标服务器 - localhost

目标数据库名称 - mydatabase

  1. 创建用于还原备份的数据库。

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "CREATE DATABASE mydatabase"

  1. 还原备份
/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db/mydb.backup"

结合MartinP和user664833的建议,我也能够让它工作。 需要注意的是,通过选择插件从 pgAdmin GUI 工具输入 psql...PSQL 控制台设置 psql 会话的凭据和权限级别,因此您必须对表具有管理员或 CRUD 权限,并且可能还必须对数据库具有管理员权限(不确定)。 然后,在 psql 控制台中的命令将采用以下形式:

postgres=# i driveletter:/folder_path/backupfilename.backup

其中 postgres=# 是 psql 提示符,而不是命令的一部分。

.backup文件将包含用于创建表的命令,因此您可能还会得到诸如"ALTER TABLE..."之类的内容。文件中执行但报告为错误的命令。 我想您始终可以在运行还原之前删除这些命令,但将它们保留在那里可能比后悔更安全,因为这些不太可能导致数据还原失败。 但请务必检查以确保您想要修复的数据确实到达了那里。(对不起,如果这对任何人来说似乎是光顾的建议,但这是一个疏忽,无论他们在这件事上工作了多久,都可能发生在任何人身上——对同事的分心、一个电话等,很容易忘记这一步。 在我职业生涯的早期,我自己使用其他数据库完成了这项工作,并想知道"哎呀,为什么我没有看到从这个查询返回的任何数据? 答案是数据从未真正恢复过,我只是浪费了 2 个小时试图寻找可疑的可能存在的不存在的错误。

这是在Windows中恢复Postgres数据库时对我有用的。首先,右键单击命令外壳并选择"以管理员身份运行"以避免权限被拒绝问题。执行相同的命令,但进行了一些更改:

newTestDB-# i E:/db-rbl-restore-20120511_Dump-20120514.sql

如果您注意到,命令"newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql"

已更改为"newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql",并在文件路径中使用/而不是 \ 斜杠。

您可能需要在数据库级别设置权限,以允许架构所有者还原转储。

我发现 psql.exe 对斜杠方向非常挑剔,至少在窗口上(上面看起来像这样)。

下面是一个示例。在 cmd 窗口中:

C:Program FilesPostgreSQL9.2bin>psql.exe -U postgres
psql (9.2.4)
Type "help" for help.
postgres=# i c:temptry1.sql    
c:: Permission denied
postgres=# i c:/temp/try1.sql
CREATE TABLE
postgres=#

当我在i调用中使用"正常"窗口斜杠时,您可以看到它失败了。但是,如果您将它们作为输入参数传递给psql.exe,则这两种斜杠样式有效,例如:

C:Program FilesPostgreSQL9.2bin>psql.exe -U postgres -f c:TEMPtry1.sql
CREATE TABLE
C:Program FilesPostgreSQL9.2bin>psql.exe -U postgres -f c:/TEMP/try1.sql
CREATE TABLE
C:Program FilesPostgreSQL9.2bin>

相关内容

  • 没有找到相关文章

最新更新