Docker中恢复PostgreSQL数据库报错:zsh: command not found: pg_restore
解决Docker PostgreSQL容器恢复时pg_restore找不到的问题
报错原因
你的判断完全正确:zsh提示command not found: pg_restore是因为本地未安装PostgreSQL客户端,pg_restore命令仅存在于运行PostgreSQL的Docker容器内部,之前的恢复命令错误地在本地环境调用了这个不存在的命令。
正确恢复方法
方法1:通过管道直接传入备份内容到容器执行恢复
利用docker exec -i保持标准输入打开,将本地解压后的备份内容传入容器,使用容器内的pg_restore完成恢复:
gunzip < /Users/me/Downloads/dvdrental.tar.gz | docker exec -i postgres-local-15 pg_restore -U postgres -F t -d dvdrental
-i参数:确保Docker容器的标准输入保持打开,允许管道传输的备份内容进入容器。- 全程复用容器内的PostgreSQL工具,无需本地安装任何PostgreSQL组件。
方法2:先复制备份文件到容器内再恢复
如果倾向于先将备份文件放到容器中再操作:
- 复制压缩备份文件到容器内部临时目录:
docker cp /Users/me/Downloads/dvdrental.tar.gz postgres-local-15:/tmp/
- 进入容器执行解压与恢复命令:
docker exec -it postgres-local-15 bash # 容器内执行以下命令: gunzip /tmp/dvdrental.tar.gz pg_restore -U postgres -F t -d dvdrental /tmp/dvdrental.tar
验证恢复结果
可以通过容器内的psql快速验证数据是否恢复成功:
docker exec -it postgres-local-15 psql -U postgres -d dvdrental -c "SELECT COUNT(*) FROM film;"
内容的提问来源于stack exchange,提问作者Tsar Bomba
相关产品推荐
相关产品推荐

