PostgreSQL
升级 PostgreSQL 到 16 版本(适用于 Policr Mini)
为什么要升级 在 Policr Mini 项目成立时 PostgreSQL 的大版本为 12,而现在的 PostgreSQL 已进化到 16 版本。落后数个数据库大版本的状态对于项目的可持续发展是不利的,这便是升级原因。 注释 如果您的实例使用的数据库版本已经是 16 或更新的版本,您不需要做这些。官方实例于 2023-08-18 完成升级,部署于此日期之后的实例通常也不需要升级(因为文档的配置模板中的版本已是最新)。 一般的升级步骤 PostgreSQL 官方有一个叫做 pg_upgrade 的工具,它可以直接将旧版本的数据兼容性提升到新版本。但是这个工具有一些限制,比如不能跨大版本升级。 如果要将 12 版本升级到 16 版本,我们需要循序渐进的经历这期间的所有大版本的过渡升级:12 -> 13 -> 14 -> 15 -> 16。这太过于繁琐,所以我们不使用这种方法。 提示 若我们后续会紧跟 PostgreSQL 的版本步伐,pg_upgrade 其实也可以是合适的工具。 数据备份与还原,升级一步到位 我们可以通过 pg_dump 和 pg_restore 两个工具来备份和还原数据,这样就可以一步到位的完成数据兼容性和数据库版本的升级。 具体步骤 以下步骤都默认在项目根目录下运行,也就是 docker-compose.yml 存在的目录。请先 cd 到该目录下,再往下看。 创建数据备份目录: mkdir dumps。此步骤是为了让数据备份文件可以存放到指定的宿主机(Host)目录中,为备份和还原做准备。 编辑 docker-compose.yml 文件,在 services -> db -> volumes 下添加 - ./dumps:/dumps,请注意缩进的正确性。此步骤是为后续还原数据做准备。 停止机器人服务: docker compose stop server。此步骤是为了避免在备份和还原期间,机器人向数据库写入新的变化。 备份数据: docker compose exec db pg_dump -U postgres -F c -Z 5 policr_mini_prod > dumps/policr_mini_prod.