postgresql - 将 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 容器内的新数据库中的正确方法是什么?
解决方案
我能够以单行命令的形式找到解决方案:
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 的我的数据库转储的名称,因此可以将其更改为您的转储名称。
推荐阅读
- r - 为什么在 r 中的时间增加 64 分钟时得到 NA?
- reactjs - 使用来自 API 端点的关键对象填充 redux 状态
- java - SpringBoot ArrayList/JSON:将某种类型的所有元素添加到该类型的列表中
- python - KNN K-最近邻:train_test_split 和 knn.kneighbors
- sql - SQL Server:从同一列中匹配值的第一行之后的列中选择所有行
- angular - Angular 9 的 Observable 订阅中未重新加载 HttpRequest
- node.js - Dockerfile ..... ✖ 错误:命令失败:/bin/sh -c autoreconf -ivf /bin/sh: autoreconf: not found
- excel - 使用 Excel/Excel VBA 将单个单元格中的文本分成多个单元格
- c++ - 为什么我一直得到 0 作为输出?
- amazon-web-services - Spot Instance“中断频率”比如期而至