首页 > 解决方案 > Docker:“pg_restore 输入文件似乎不是有效的存档”错误

问题描述

我使用以下命令备份了一个 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 db?

标签: windowspostgresqldocker

解决方案


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

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


推荐阅读