我正在使用pg_dump和pg_restore来备份和恢复postgres数据库。
以下是与此问题相关的文档中的一些信息 对于Pg_restore,-C选项描述如下
-C
- 创建
在恢复之前创建数据库。如果还指定了--clean,则> >之前删除并重新创建目标数据库 连接到它。使用此选项时,数据库以-d命名 仅用于发出初始DROP DATABASE和CREATE DATABASE 命令。所有数据都将还原到显示的数据库名称中 存档。
但是,即使我在pg_restore中使用此选项,也会出现以下错误
pg_restore:[archiver(db)]与数据库“test”的连接失败: 致命:>数据库“test”不存在
根据描述,-C选项应该创建了缺少的数据库。但是在我的情况下并不适用。
以下是我为备份和恢复所做的步骤:
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选项,因为它仅对纯文本格式有意义
删除测试数据库
使用pg_resore恢复数据库
pg_restore -C -d test -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
我无法理解这里的问题是什么!我做错了吗? 如果需要更多信息,请告诉我。
答案 0 :(得分:4)
以下引用并不代表您可能认为的含义。在实现他们所说的话之前,我还必须阅读三次。
使用此选项时,仅使用以-d命名的数据库 发出初始DROP DATABASE和CREATE DATABASE命令。所有数据 将恢复为存档中显示的数据库名称。
这意味着pg_restore最初将连接到使用-d指定的数据库。它不会创建该数据库。它使用您要还原的存档中的名称创建一个数据库,并将数据还原到该数据库中。
答案 1 :(得分:4)
正如@Eelke所说 - 你已经在文件中写了'创建数据库'所以当你运行脚本时这个数据库不存在...那就是总有'postgres'数据库。试试这个:
pg_restore -C -d postgres -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
这应该:
当然检查谁是postgres数据库的所有者 - 在大多数情况下,你必须以用户'postgres'的形式运行它。
答案 2 :(得分:0)
对我来说从来没有用过,所以此命令创建了数据库
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**
故事的结尾