You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Postgres备份文件导入Docker Postgres容器内的新数据库?

正确迁移Heroku Postgres备份到Docker Postgres容器的方法

你遇到的两个错误都是命令语法或用户权限的问题,下面一步步帮你解决:

先修正docker exec的语法错误

你第二次尝试的命令把-u参数放错位置了——docker exec的选项(比如-u)必须放在容器名称之前,正确的格式逻辑是:docker exec [选项] <容器名> <要执行的命令>。之前你把-u放在容器名后面,Docker会把-u当成要执行的命令,自然会报错找不到这个"可执行文件"。

再解决Postgres角色权限问题

第一个错误提示FATAL: role "root" does not exist,是因为默认用root用户执行pg_restore,而Postgres默认没有root这个数据库角色,必须使用Postgres认可的合法用户(比如默认的postgres用户,或者你自己创建的应用数据库用户)。

完整的迁移步骤

  1. 确认备份文件路径:你已经用docker cp latest.dump mycontainer:/latest.dump把备份复制到了容器根目录,所以文件绝对路径是/latest.dump,执行命令时要写全路径,避免找不到文件。

  2. 执行正确的恢复命令:
    如果使用Postgres默认的postgres用户,命令如下:

    docker exec -u postgres <pg_container> pg_restore --no-owner --no-privileges -d <db_name> /latest.dump
    

    这里添加--no-owner和--no-privileges参数是因为Heroku的备份文件会包含它自身的数据库角色信息,直接恢复可能触发权限报错,这两个参数可以跳过角色和权限的恢复,适配你的新容器环境。

  3. 如果目标数据库不存在,先创建它:
    要是你的<db_name>还没在容器里创建,先执行这条命令创建:

    docker exec -u postgres <pg_container> createdb -U postgres <db_name>
    

额外注意事项

  • 确保你的Postgres容器已经正常启动,且<db_user>确实拥有访问<db_name>的权限。
  • 如果备份文件体积较大,恢复过程可能需要一段时间,耐心等待即可。

内容的提问来源于stack exchange,提问作者Emile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:13:39