【问题标题】:pg_restore with -C option does not create the database带有 -C 选项的 pg_restore 不会创建数据库
【发布时间】:2017-04-08 15:44:21
【问题描述】:

我正在使用 pg_dump 和 pg_restore 来备份和恢复 postgres 数据库。

以下是与此问题相关的文档中的一些信息 对于Pg_restore,-C选项描述如下

-C

--创建

在还原到数据库之前创建数据库。如果还指定了 --clean , > > 之前删除并重新创建目标数据库 连接到它。使用此选项时,以 -d 命名的数据库 仅用于发出初始 DROP DATABASE 和 CREATE DATABASE 命令。所有数据都恢复到出现在 存档。

但是,即使我将此选项与 pg_restore 一起使用,我也会收到以下错误

pg_restore: [archiver (db)] 连接到数据库“test”失败: 致命:> 数据库“测试”不存在

根据描述,-C 选项应该已经创建了缺少的数据库。但是在我的情况下它不是。

以下是我为备份和恢复所做的步骤:

  1. 使用pg_dump备份数据库
pg_dump -N backup -d test --format custom -v -h xxhostxx -p 5432 -U xxuserxx --lock-wait-timeout 300000 -f test_pg_dump.dmp

注意:不要使用 -C 选项,因为它仅对纯文本格式有意义

  1. 删除了test数据库

  2. 使用 pg_resore 恢复数据库

    pg_restore -C -d test -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
    

我不明白这里有什么问题!我做错什么了吗? 如果需要更多信息,请告诉我。

【问题讨论】:

    标签: postgresql pg-dump pg-restore


    【解决方案1】:

    它从来没有为我工作过,所以这个命令创建了数据库

    createdb -h HOST -U USER -W DB_NAME
    

    然后执行pg restore

    pg_restore -d DB_NAME -v -h HOST -p PORT -U USER DUMP_FILE.dump**
    

    故事结束

    【讨论】:

    • 它是 pg 安装的一部分。取决于您的操作系统和 PG 版本。我使用的是 ubuntu 18.04 和 PG9
    【解决方案2】:

    就像@Eelke 所说的那样-您在文件中写入了“创建数据库”,因此当您运行脚本时该数据库不存在...这就是始终存在“postgres”数据库的原因。试试这个:

    pg_restore -C -d postgres -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
    

    这应该:

    1. 连接到 postgres 数据库
    2. 创建测试数据库
    3. 断开与 postgres 的连接并连接到测试
    4. 将数据上传到数据库

    当然要检查谁是 postgres 数据库的所有者 - 在大多数情况下,您必须以用户“postgres”的身份运行它。

    【讨论】:

    • 此命令中有一个错误,可能有人没有注意到:postgres-v 应该是 postgres -v。我不能在帖子中编辑少于 6 个字符。
    【解决方案3】:

    以下引用并不意味着您可能认为它意味着什么。我还得读三遍才明白他们在说什么。

    使用此选项时,以 -d 命名的数据库仅用于 发出初始的 DROP DATABASE 和 CREATE DATABASE 命令。所有数据 恢复为存档中出现的数据库名称。

    这意味着 pg_restore 最初将连接到 -d 指定的数据库。它不会创建该数据库。它使用您正在恢复的存档中的名称创建一个数据库,并将数据恢复到该数据库中。

    【讨论】:

    • 这是否意味着如果数据库不存在就无法恢复它?要恢复你需要先发出命令创建一个空数据库然后恢复?
    • @Swapnil17:你总是有一个空数据库:template1
    • 感谢@Eelke 和'a_horse_with_no_name'
    • 哇,我使用这些工具太久了,现在才学会。多么奇怪的工作方式!
    猜你喜欢
    • 2016-10-07
    • 2020-02-10
    • 2021-11-10
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多