将数据从一个应用程序中的postgresql数据库复制到heroku上另一个应用程序中的postgresql数据库的正确方法是什么?

时间:2018-01-23 09:48:44

标签: postgresql heroku

我一直关注文档Heroku docs on the subject 并且经历了这个并尝试了对它所做的事情的变化

  

直接数据库到数据库副本

我确信文档是错误的,或者我有一些设置或错误(有管理员权限)。我还阅读了SO上的一些分散的东西,heroku CLI中关于如何执行此操作的命令已更改。

当我运行此命令时(使用我的heroku数据库的凭据)

heroku pg:copy sushi::ORANGE GREEN --app sushi-staging

确认消息后:

  

警告:破坏性行动    ▸此命令将从

中删除所有数据

并确认。然后我收到一条错误消息:

  

Heroku PostgreSQL数据库必须是源或目标

将数据从一个应用程序中的postgresql数据库复制到heroku上另一个应用程序中的postgresql数据库有什么正确的方法?

7 个答案:

答案 0 :(得分:3)

执行此操作的正确方法是:

heroku pg:copy [app name to copy from]::[app DB name] [DB to copy to] --app [app name to copy to]

因此,如果要从应用程序“ sushi”上的数据库“ Orange”复制到应用程序“ sushi-staging”上的数据库“ Green”,则命令将是您所拥有的:

heroku pg:copy sushi::Orange Green --app sushi-staging

在大多数情况下,一个应用程序上只有一个数据库,并且名称不会是颜色。它将被命名为“ DATABASE_URL”。您可以在应用程序的配置变量中找到数据库名称。我只有一个数据库,所以我必须这样做:

heroku pg:copy sushi::DATABASE_URL DATABASE_URL --app sushi-staging

希望有帮助

答案 1 :(得分:2)

这些文件严重不明确。和heroku一起玩耍应该清楚明白。

heroku pg:copy ::DATABASE_URL -a ... 

您实际上将数据库编写为to-database-url的字符串表示形式,但您使用环境变量名称DATABASE_URL

答案 2 :(得分:0)

我遇到了同样的问题,可以通过使用HEROKU_POSTGRESQL_TEAL_URL而不是DATABASE_URL来解决:

heroku pg:copy postgresql-rugged-XXXX postgresql-closed-XXX -a app-name

注意:这两个数据库都连接到同一应用程序(在我的情况下为app-name

现在,您如何找到HEROKU_POSTGRESQL_TEAL_URL?您可以在这里找到它:

Heroku add-ons

答案 3 :(得分:0)

这对我有用:

heroku pg:copy [origin databasee URI] DATABASE_URL --app [app-name]

答案 4 :(得分:0)

对我有用的实际FULL命令DATABASE_URL不能代替任何东西,

heroku pg:copy project1::DATABASE_URL project2::DATABASE_URL

heroku自动填写环境变量。

答案 5 :(得分:0)

不幸的是复制对我不起作用所以我做了一个备份/恢复操作

 % Reached end of topic one-to-many [0] at offset 185
a
custom

如果您运行下面的命令,它将显示来自源应用及其 ID 的可用备份

heroku pg:backups:capture --app [source-app]

使用

获取目标数据库网址
heroku pg:backups --app=[source-app]

然后创建一个名为 DATABASE_URL 的环境变量并添加来自上述命令的信息

heroku config:get DATABASE_URL --app [destination-app]

最后是恢复命令。 (只需写入 DATABASE_URL,因为这将从我们之前创建的 env 变量中获取值)

export DATABASE_URL='postgres://…'

更新: 导出 SOURCE 和 DESTINATION 的 database_urls,您可以使用以下内容在应用程序之间进行复制

heroku pg:backups:restore [source-app]::[backup-id] DATABASE_URL --app [destination-app]

答案 6 :(得分:0)

如果您正在考虑将应用程序从一个 heroku 帐户转移到另一个帐户,则情况会有所不同。您可能想要“转让所有权”。这是可能的:

  1. 您必须确保接收新所有权的帐户具有信用卡详细信息(即原始帐户是否有应计费用)

  2. 确保您已将接收所有权的新帐户添加为原始所有者 heroku-account 中的“合作者”。这可以通过单击应用程序(在您的仪表板中),单击“访问”选项卡来完成。然后添加一个合作者,输入接收所有权的 heroku 帐户的电子邮件地址。

您也可以遵循本指南:https://devcenter.heroku.com/articles/transferring-apps