首页 文章

如何将PostgreSQL转储文件恢复到Postgres数据库?

提问于
浏览
42

我有一个带有 .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 回答

  • 5

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

    根据 pg_dump 被指示转储的内容,SQL文件可以具有不同的SQL命令集 . 例如,如果指示 pg_dump 使用 --clean--schema-only 转储数据库,则无法期望能够从该转储恢复数据库,因为没有用于COPYing的SQL命令(或者如果使用 --inserts 则INSERTing)表格中的数据 . 像这样的转储将只包含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 ("custom format")进行备份(不是纯SQL文件而是压缩文件),则需要使用 pg_restore 工具 .

    如果您正在使用unix,请尝试以下方法:

    man psql
    man pg_dump
    man pg_restore
    

    否则,看看the html docs . 祝好运!

  • 43

    尝试 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 命令,因此输出为表空间列表的原因 . 正如你所说,它不是"default tables of PostgreSQL"的清单 .

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

    值得注意的是,您“提升权限”的尝试与您尝试执行的命令的结果无关 . 此外,您没有说出导致所谓的“权限被拒绝”错误的原因 .

    最后,转储文件的扩展名无所谓,实际上你甚至不需要扩展名 . 实际上, pgAdmin 在选择备份文件名时建议使用 .backup 扩展,但实际上你可以实现任何你想要的扩展,包括根本没有扩展名 . 问题是 pgAdmin 似乎只允许"Restore"或"Directory"转储(至少在应用程序的MAC OS X版本中就是这种情况),所以只需使用 psql \i 命令,如上所示 .

  • 7

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

    首先打开终端类型

    sudo su postgres
    

    创建新数据库

    createdb [database name] -O [owner]

    createdb test_db [-O openerp]
    

    pg_restore -d [Database Name] [path of dump file]

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

    等待数据库恢复完成 .

    Remember that dump file should have read, write, execute access, so for that you can apply chmod command

  • 0

    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 . 备份”

  • 14

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

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

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

    .backup文件将包含用于创建表的命令,因此您可能会在文件中获得“ALTER TABLE ...”命令,这些命令会被执行但报告为错误 . 我想你总能删除这些命令在运行恢复之前,但你可能比抱歉更安全,因为这些命令不会导致数据恢复失败 . 但是要经常检查以确保您想要恢复的数据实际到达那里 . (对不起,如果这似乎是对任何人的光顾建议,但这是一个疏忽,任何人都可能发生这种情况,无论他们对这些东西有多长时间 - 一时间分散了同事的注意力,电话等等,这很容易忘了这一步 . 我在职业生涯早期使用其他数据库自己做了,并想知道“哎呀,为什么我从这个查询中看不到任何数据?”答案是数据从未实际恢复,我只是浪费了2个小时的尝试寻找可能存在的不存在的错误 . )

  • 0

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

  • 22

    我发现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 调用中使用"normal" windows斜杠时,您可以看到它失败 . 但是,如果将它们作为输入参数传递给 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>
    

相关问题