Heroku环境下PostgreSQL 10升级至11的操作步骤问询
Heroku PostgreSQL 10 升级至 11 官方步骤指引
一、官方推荐的 pg_upgrade 升级步骤(适用于启用校验和的实例)
这是Heroku针对启用校验和数据库的官方升级方案,downtime短且数据安全:
确认当前数据库状态
运行命令检查版本和校验和状态:heroku pg:info DATABASE确保输出里的
Version是10,Data Integrity显示Checksummed。创建指定版本11的跟随者实例
这一步是明确指定升级到11版本的关键,不会自动选择更高版本:heroku pg:follow --app your-app-name DATABASE HEROKU_POSTGRESQL_<COLOR> --version 11替换
your-app-name为你的应用名,<COLOR>是Heroku分配的数据库标识(比如BLUE、GREEN,执行后会提示可用标识)。等待跟随者同步完成
持续查看同步状态:heroku pg:info HEROKU_POSTGRESQL_<COLOR>直到
Followers字段显示Up to date,同步时间取决于你的数据量大小。开启维护模式
防止升级期间用户操作导致数据不一致:heroku maintenance:on将11版本跟随者提升为主数据库
完成主库切换:heroku pg:promote HEROKU_POSTGRESQL_<COLOR>验证升级结果
检查新主库版本:heroku pg:info DATABASE确认
Version为11,同时测试应用连接,比如运行数据库查询或启动应用验证功能正常。关闭维护模式并清理旧实例
heroku maintenance:off确认应用稳定运行后,删除旧的10版本数据库:
heroku pg:destroy OLD_DATABASE_URL
二、Stack Overflow导出导入法的生产环境注意事项
如果是用pg_dump+pg_restore的方法,生产环境可以用,但要注意:
- 必须先开启维护模式,防止导出过程中产生新数据导致丢失
- 导出时要适配Heroku权限,用以下命令:
pg_dump -F c --no-owner -d YOUR_DATABASE_URL > dump.dump - 导入到新创建的11版本数据库:
pg_restore --no-owner -d NEW_DATABASE_URL dump.dump - 这种方法downtime比pg_upgrade长,适合数据量较小的实例,官方更推荐pg_upgrade方案。
三、必做前置准备
- 升级前一定要备份数据:
并下载备份到本地保存,避免意外。heroku pg:backups:capture - 先在staging环境完全复刻生产流程测试,确认应用兼容性(Rails 5.2和Ruby 2.6.7对PostgreSQL 11完全兼容,无需改代码)
- 升级期间实时监控日志:
heroku logs --tail
内容的提问来源于stack exchange,提问作者shashank barman
相关产品推荐
相关产品推荐

