Heroku部署Metabase升级遇Postgres权限错误:需加角色执行迁移
解决Heroku上Metabase升级时
permission denied for relation databasechangelog错误 这问题我之前帮好几个开发者搞定过——本质就是Metabase升级时,用来执行数据库结构变更的Liquibase工具没法访问它用来记录变更历史的databasechangelog表,核心原因是当前数据库用户没有足够的读写权限。
下面是一步步的解决步骤:
1. 连接到Heroku的Postgres数据库
打开终端,用Heroku CLI连接到你的应用数据库:
heroku pg:psql -a 你的应用名称
把你的应用名称替换成你在Heroku上的Metabase应用名。
2. 赋予数据库用户对应权限
进入psql命令行后,先确认当前的数据库用户:
SELECT current_user;
复制返回的用户名,然后执行以下命令赋予权限(把你的数据库用户名替换成刚才查到的内容):
-- 给变更日志表和锁表赋予全权限 GRANT ALL PRIVILEGES ON TABLE databasechangelog TO 你的数据库用户名; GRANT ALL PRIVILEGES ON TABLE databasechangeloglock TO 你的数据库用户名; -- 如果上面的还不够,可以给整个public schema赋予权限(更彻底) GRANT ALL PRIVILEGES ON SCHEMA public TO 你的数据库用户名;
执行完后输入\q退出psql。
3. 重启Metabase应用
最后重启你的Heroku应用,让权限变更生效:
heroku restart -a 你的应用名称
为什么会出现这个问题?
Metabase每次升级都会用Liquibase来同步数据库结构,databasechangelog和databasechangeloglock是Liquibase的核心表,用来跟踪所有变更记录和防止并发变更。可能的触发原因包括:
- 之前手动修改过数据库的权限配置
- Heroku的Postgres实例在维护或升级过程中重置了部分权限
- 你使用了非默认的数据库用户来运行Metabase
如果执行完这些步骤还是报错,建议重新查看应用日志,确认是否有其他更具体的权限相关提示,或者检查DATABASE_URL环境变量是否指向了正确的数据库实例。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

