首页 > 解决方案 > 将 Postgres 转储中的数据加载到 Docker Postgres 容器中的新数据库中

问题描述

我正在将应用程序从 Heroku 移动到 Docker 容器中,并试图弄清楚如何将数据从 Heroku db 迁移到新的 Postgres 容器中。

到目前为止的尝试

我已将数据库的转储复制到 Postgres 容器中。

docker cp latest.dump mycontainer:/latest.dump

但是,当我尝试对其进行 pg_restore 时,我在尝试运行 docker exec 命令时遇到错误。

docker exec <pg_container> pg_restore -d <db_name> latest.dump

pg_restore: [archiver (db)] connection to database "<db_name>" failed: FATAL:  role "root" does not exist

或者当我尝试使用 db 用户运行时:

docker exec <pg_container> -u <db_user> pg_restore -d <db_name> latest.dump

OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"-u\": executable file not found in $PATH": unknown

问题

将这些数据加载到 docker 容器内的新数据库中的正确方法是什么?

标签: postgresqldocker

解决方案


我能够以单行命令的形式找到解决方案:

docker exec <container_name> pg_restore --verbose --clean --no-acl --no-owner -h postgres --dbname=postgresql://<user>:<password>@127.0.0.1:<port>/<db_name> latest.dump

latest.dump 是来自 Heroku 的我的数据库转储的名称,因此可以将其更改为您的转储名称。


推荐阅读