Heroku数据库从备份恢复失败求助:扩展创建报错
解决Heroku数据库恢复时扩展创建失败的问题
方法一:修改备份文件后重新恢复
- 下载目标备份到本地:
heroku pg:backups:download b101 --app example-app - 导出备份的schema部分到SQL文件:
pg_restore --schema-only --verbose latest.dump > schema.sql - 编辑
schema.sql,找到所有创建扩展的语句,将WITH SCHEMA public替换为WITH SCHEMA heroku_ext。比如把:
修改为:CREATE EXTENSION IF NOT EXISTS "hstore" WITH SCHEMA public;CREATE EXTENSION IF NOT EXISTS "hstore" WITH SCHEMA heroku_ext; - 本地生成适配后的新备份:
# 创建临时数据库 createdb temp_db # 导入修改后的schema psql temp_db -f schema.sql # 导出为新的dump文件 pg_dump temp_db -Fc -o new_backup.dump - 上传新备份到Heroku并恢复:
heroku pg:backups:restore new_backup.dump DATABASE_URL --app example-app
方法二:跳过扩展恢复,手动创建
- 恢复备份时排除扩展相关内容:
heroku pg:backups:restore b101 DATABASE_URL --app example-app --exclude-table-data=pg_catalog.pg_extension - 登录Heroku PostgreSQL控制台手动创建扩展:
在交互界面执行:heroku pg:psql --app example-appCREATE EXTENSION IF NOT EXISTS "hstore" WITH SCHEMA heroku_ext; CREATE EXTENSION IF NOT EXISTS "pg_stat_statements" WITH SCHEMA heroku_ext;
方法三:尝试参数适配恢复
直接添加--no-owner和--no-acl参数执行恢复,部分场景下Heroku会自动调整扩展的创建路径:
heroku pg:backups:restore b101 DATABASE_URL --app example-app --no-owner --no-acl
内容的提问来源于stack exchange,提问作者apiljic
相关产品推荐
相关产品推荐

