使用基础 PostgreSQL Docker 映像时,您可以选择 PostgreSQL 版本,启动容器并运行。太棒了!但是,将来升级到较新版本的 PostgreSQL 的正确/最佳方法是什么?
答案1
目前对此没有简单的解决方案,但我发现最简单的方法是使用pg_dump
旧版本,然后将该转储加载到新版本中。
有很多讨论https://github.com/docker-library/postgres/issues/37关于此问题的可能解决方案,以及基于 docker 的升级概念验证https://github.com/tianon/docker-postgres-upgrade
答案2
在容器中运行 PostgreSQL 一年多之后,我倾向于认为数据库不太适合容器化,原因正是如此。容器并非旨在像虚拟机一样使用,因此,如果您试图将其视为您管理的虚拟机,工具的每个方面都会与您作对。容器就像美化的 chroot - 为特定应用程序提供隔离和可重现的环境,应用程序所需的配置越少越好。
综上所述,如果您坚持必须在容器中运行 PostgreSQL,那么至少应该从某个地方安装一个卷来放置数据文件,以便您可以安全地销毁或修改数据库服务器映像(例如 PostgreSQL 升级)。任何必须完成的配置都应该在 Dockerfile 中完成,以便升级也可以通过编辑 Dockerfile 来处理 - 例如,如果您正在进行小规模升级,您可能只需要更改FROM
Dockerfile 中映像的标签。
答案3
答案4
这Github 问题链接A Lee
在的回答中有一个Dirbaio
使用命令进行评论对我来说效果很好:
docker exec postgres-old pg_dumpall -U postgres | docker exec -i postgres-new psql -U postgres
尽管我实际使用的命令是:
docker exec postgres-old pg_dumpall | docker exec -i postgres-new psql
.. 因为我使用的是 root 用户而不是postgres
。
Postgres 文档pg_dumpall
:https://www.postgresql.org/docs/12/app-pg-dumpall.html