【问题标题】:Docker: "pg_restore input file does not appear to be a valid archive" errorDocker:“pg_restore 输入文件似乎不是有效的存档”错误
【发布时间】:2021-05-27 20:10:25
【问题描述】:

我使用以下命令备份了一个 PostgreSql 数据库并创建了一个 sql 文件:

cmd /c 'docker exec -t <container-name> pg_dump <db_name> -U postgres -c 
   -v > C:\\backup\\<db_name>.sql'

但是,我无法使用以下命令恢复 sql 备份文件:

首先我删除并创建一个空数据库:

docker exec <container-name> bash -c "dropdb -U postgres <db_name>"
docker exec <container-name> bash -c "createdb -U postgres <db_name>"

然后恢复:

cmd /c "docker exec -i <container-name> pg_restore -C -U postgres -d 
  <db_name> -v < C:\\<db_name>.sql"

给出“pg_restore:错误:输入文件似乎不是有效的存档”错误。所以,

1.如何用sql文件恢复数据库?

2.如何在 Windows 上的 Docker 中备份 PostgreSql 数据库?

【问题讨论】:

    标签: windows postgresql docker


    【解决方案1】:

    纯文本pg_dump 使用psql 恢复,而不是pg_restore。

    我不明白你为什么要在容器内运行它。在主机操作系统上安装 PostgreSQL 客户端并简化过程。此外,备份应该在与数据库不同的机器上。

    【讨论】:

    • 其实我已经为 Docker 和 PostgreSQL 考虑了不同的方法。将数据装载到主机驱动器而不是 WSL2 对性能不利。我唯一想做的就是让事情变得简单,但由于我是 Docker 新手,所以我有点困惑。能否请您澄清一下以下问题?
    • 1. 我应该使用 WSL2 (Ubuntu) 部件来保存我的所有 Docker 容器和卷吗?
    • 2. 在使用WSL2部分时,如何轻松备份和恢复数据库?我可以直接备份到 Windows 部分并使用 Windows 部分的备份文件恢复数据库吗?
    • 1) 我不知道。我不使用 Windows。 2) 是的,这是可能的。
    • 感谢您的回复。对于#2,您能否将备份和恢复命令发布到您的答案中?
    猜你喜欢
    • 2021-06-02
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多