如何将数据库附加到Heroku应用程序?

23
我正在使用Heroku的Postgres插件,并在Heroku Postgres插件页面上创建了一个新的生产数据库。 我没有使用我的应用程序的资源页面直接将其添加到我的应用程序中。
现在我想将此数据库附加到我的应用程序,以便heroku pg命令可以识别它。
顺便说一下,在将我的应用程序的DATABASE_URL配置变量设置为指向它后,我可以使用该数据库,但是heroku pg命令还没有识别它。
其他信息:之前的数据库是Shared,而新的数据库是Production。
3个回答

13
Heroku的插件现在可以在应用程序之间和单个应用程序上多次附加。
heroku addons:attach ADDON_NAME -a APP_NAME

来源:https://devcenter.heroku.com/changelog-items/646

我可以为您翻译这段内容。
要知道你的插件名称,请执行以下操作:
heroku addons

来源:https://devcenter.heroku.com/articles/managing-add-ons

我可以帮忙翻译这段内容。这是一个关于管理附加组件的文章,提供了有关如何在Heroku上管理附加组件的详细信息和指南。

2
这个答案比2012年最受赞的@rdegges答案更好,因为Heroku有时会更改数据库URL,可能是在停机或其他维护操作之后。 - karlbecker_com
如果您想将新的数据库设置为默认数据库,您需要将其提升,类似于 heroku pg:promote HEROKU_POSTGRESQL_ONYX --app app_destination - MegaTux

12
您是否是使用应用程序无关的 https://postgres.heroku.com/ 网站添加数据库?还是只是在Heroku控制面板中创建了一个postgresql数据库?
如果您是在https://postgres.heroku.com/上创建数据库,那么您将无法通过heroku pg:info命令看到该数据库。但是,您可以执行以下操作将数据库添加到应用程序中:
  1. 登录https://postgres.heroku.com/
  2. 单击要附加到应用程序的数据库。
  3. 在“连接设置”下,单击右上角的配置按钮。
  4. 然后单击“URL”选项。
  5. 复制您的数据库URL,应该类似于“postgres://blah:blah@ec2-23-23-122-88.compute-1.amazonaws.com:5432/omg”。
  6. 在应用程序的命令行中运行heroku config:set DATABASE_URL=postgres://blah:blah@ec2-23-23-122-88.compute-1.amazonaws.com:5432/omg
我们所做的就是将数据库分配给应用程序中的DATABASE_URL环境变量。这是默认情况下在本地为应用程序提供数据库时使用的变量,因此理论上,分配这个值应该可以正常工作。

1
好的,我已经完成了,并且数据库与应用程序正常工作。我的问题是pg命令无法看到它,即使将DATABASE_URL配置变量设置为指向新的生产数据库。 - Emam
在我从Hobby-dev升级到Hobby-basic后,这个解决了我的问题。 - Jay Killeen
2
有一个官方的方法:https://blog.heroku.com/expanding_the_power_of_add_ons - Meori Oransky
1
谢谢@MeoriOransky,这正是我在寻找的:heroku addons:attach my-sushi-db -a my-sushi-reporting --as MAIN_SUSHI_DB(在此示例中,“my-sushi-reporting”是将附加数据库的应用程序) - Greg Sadetsky

1
要将你在https://postgres.heroku.com/创建的数据库连接到正在使用的Heroku应用程序上,你不能使用任何pg备份命令,据我所知,也没有受支持的Heroku方法来连接数据库到Heroku应用程序。
但是,你可以使用pg_dump创建数据库备份,然后使用pg_restore填充连接到应用程序的新数据库:
pg_dump -i -h hostname -p 5432 -U username -F c -b -v -f "backup-filename" database_name

完成此步骤后,您可以使用以下内容填充新数据库:
pg_restore -i -h new_hostname -p 5432 -U new_username -d new_database_name -v "same_backup_filename"

即使您从“基本计划”升级到“起重机计划”,仍然需要进行备份和恢复,但由于数据库已附加到您的应用程序中,因此您可以使用Heroku备份命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接