Heroku跨应用PostgreSQL数据库复制报错,求正确操作方法
正确跨Heroku应用复制PostgreSQL数据的方法
我来帮你解决这个问题!你碰到的「Heroku PostgreSQL database must be source or target」报错,主要是命令格式细节没匹配上当前Heroku CLI的要求,加上可能对数据库别名的使用有误解。下面给你一步步捋清楚正确的操作流程:
1. 先确认源和目标的数据库信息
首先得搞清楚两个应用里的数据库别名到底是什么——别凭记忆猜,用命令查最靠谱:
# 查看源应用(sushi)的所有数据库 heroku pg:info --app sushi # 查看目标应用(sushi-staging)的所有数据库 heroku pg:info --app sushi-staging
从输出里找到你要用来复制的源数据库别名(比如你说的ORANGE)和目标数据库别名(比如GREEN),确保这两个别名确实存在于对应的应用中。
2. 确保目标数据库已创建(如果还没有)
如果目标应用里还没有GREEN这个别名的数据库,得先创建它:
# 替换成你需要的数据库套餐,比如hobby-dev、standard-0 heroku addons:create heroku-postgresql:hobby-dev --app sushi-staging --as GREEN
这一步会给目标应用添加一个别名为GREEN的PostgreSQL数据库。
3. 执行正确的复制命令
现在用符合当前CLI要求的格式执行复制:
heroku pg:copy sushi::ORANGE GREEN --app sushi-staging
执行后会弹出警告,明确告诉你目标数据库会被清空后再复制,确认没问题就输入y回车。
4. 验证复制是否成功
复制完成后,可以连接到目标数据库检查数据:
heroku pg:psql --app sushi-staging GREEN
进去后随便跑个查询(比如SELECT COUNT(*) FROM your_table;),看看数据是不是和源库一致。
要是还是报错?试试这几个排查点
- 升级Heroku CLI:旧版本的命令格式可能有问题,先更到最新版:
heroku update - 检查别名和应用名拼写:别打错应用名或者数据库别名,比如
sushi是不是写成sush了?ORANGE是不是拼错了? - 用默认别名试试:如果自定义别名(ORANGE/GREEN)有问题,换成默认的
DATABASE别名试试:heroku pg:copy sushi::DATABASE DATABASE --app sushi-staging
内容的提问来源于stack exchange,提问作者slipperypete
相关产品推荐
相关产品推荐

