如何在Heroku中提升切换作为数仓的辅助Postgres数据库
报错原因
Cannot overwrite attachment values WAREHOUSE_DATABASE_URL是Heroku的机制限制:所有通过平台add-on附件方式挂载的数据库,其自动生成的连接串配置项属于平台托管值,不支持直接用heroku config:set手动覆盖。heroku pg:promote仅能操作绑定到默认DATABASE别名的主库(对应DATABASE_URL配置),自定义别名的辅助库需要通过add-on的挂载/卸载命令完成切换。
操作步骤
- 先查询当前应用下所有Postgres实例的资源标识
执行以下命令列出所有挂载的Postgres add-on,区分旧免费数仓、新付费数仓对应的资源名(格式类似postgresql-xxxx-12345):heroku addons | grep postgresql - 卸载旧免费数仓的配置绑定
不要直接删除旧数仓实例,先解除它和配置项的绑定关系,执行:
命令执行完成后,原来被写保护的heroku addons:detach <旧免费数仓资源名> --app <你的Heroku应用名>WAREHOUSE_DATABASE_URL配置项会被自动移除,不再触发覆盖报错。 - 挂载新付费数仓到目标配置别名
将新的付费Postgres实例挂载为WAREHOUSE别名,Heroku会自动生成格式正确的WAREHOUSE_DATABASE_URL配置项,和你之前Rails配置里读取的变量名完全匹配,无需修改应用代码:heroku addons:attach <新付费数仓资源名> --as WAREHOUSE --app <你的Heroku应用名> - 验证配置并重启应用
先确认配置值已经更新为新付费库的连接串:
确认无误后重启应用让新配置生效:heroku config:get WAREHOUSE_DATABASE_URL --app <你的Heroku应用名>
重启后可进入Rails控制台验证数仓连接、数据读写正常,确认业务无影响后,再按需删除旧的免费数仓add-on即可。heroku restart --app <你的Heroku应用名>
注意:切换过程不要提前删除旧数仓实例,避免挂载操作异常时无法回滚;只要不删除实例,detach操作仅解除配置绑定,不会丢失实例内的已有数据。
内容的提问来源于stack exchange,提问作者eamers
相关产品推荐
相关产品推荐

