如何清空Heroku数据库。

382

我正在 Heroku 上开发一个 Ruby on Rails 3 的 Web 应用,如何清空数据库?

18个回答

727

如果您正在使用SHARED_DATABASE_URL,则可以删除数据库:

$ heroku pg:reset DATABASE_URL

现在需要重新创建一个空的数据库:

$ heroku run rake db:migrate  

为了用你的种子数据填充数据库:

$ heroku run rake db:seed

您可以通过执行以下代码将最后两个步骤(migrate & seed)合并为一个操作:

$ heroku run rake db:setup

编辑 2014-04-18: rake db:setup 在Rails 4中不能使用,因为会出现无法创建数据库错误

编辑 2014-10-09: 您可以在Rails 4中使用rake db:setup。它确实会出现无法创建数据库的错误(因为使用heroku pg:reset命令已经创建了数据库)。但是,在错误消息后,它也会加载您的数据库架构和种子。

你几乎可以用任何rake命令来做到这一点,但也有例外。例如,db:reset不能通过heroku run rake执行。相反,您必须使用pg:reset

更多信息可以在Heroku的文档中找到:

运行Rake命令

重置Postgres DB


23
谢谢。实际上,“heroku pg:reset --db SHARED_DATABASE_URL”解决了问题。但是你指导我朝正确的方向前进。 - Jay Godse
5
Heroku现在表示,“SHARED_DATABASE_URL已过时,请使用SHARED_DATABASE”。 - Phil
6
实际上,您应该检查您的schema.rb文件,并使用命令: rake db:schema:load - Amala
19
他们又改了,现在是 heroku pg:reset DATABASE - Haris Krajina
9
为了节省几秒钟的时间,可以使用heroku pg:reset DATABASE --confirm appname - GangstaGraham
显示剩余13条评论

103

Heroku现已将--db选项废弃,现在应该使用:

heroku pg:reset DATABASE_URL --confirm {the name of your app}

这有点令人困惑,因为您使用了文字字面量 SHARED_DATABASE,但在我写下 {您的应用程序名称} 的地方,请替换为您的应用程序名称。例如,如果您的应用程序被称为 my_great_app,则使用:

heroku pg:reset DATABASE_URL --confirm my_great_app

3
如果你只是复制粘贴,跳过括号内(包括括号)的内容,Heroku 将会告诉你要输入什么。 - baash05
在Heroku上获取你的PostgreSQL数据库名称的有用命令是:heroku config | grep HEROKU_POSTGRESQL。 - zero_cool
你在代码示例中使用的是 DATABASE_URL,你是指这个吗?而不是文字文本 SHARED_DATABASE。 - Michael Durrant
不是的。我指的是另一个答案中使用了“SHARED_DATABASE”这个词。 - Dave Sag

72

删除数据库:

$ heroku pg:reset SHARED_DATABASE --confirm NAME_OF_THE_APP

重新创建数据库的方法:

$ heroku run rake db:migrate

种子数据库:

$ heroku run rake db:seed

**最后一步

$ heroku restart

4
我更喜欢这个答案,相比其他任何答案,在我的Heroku场景中可以完美运作,我认为它被低估了! - Jonathan
可能是因为Heroku最近更改了这些命令的语法。 - George Yacoub
1
“heroku restart” 是我缺失的关键部分。谢谢。 - Jeremy Nikolai
heroku run rake db:migrate 不再重新创建数据库。 - Rots

48

1
同意。当前重新填充数据库的方法是:heroku run rake db:migrate db:seed - aaron-coding

14

现在的命令是

heroku pg:reset DATABASE_URL --confirm your_app_name

这样你就可以指定要重置哪个应用程序的数据库。

然后你可以运行:

heroku run rake db:migrate 
heroku run rake db:seed 

或者直接对上述两个命令进行操作。

heroku run rake db:setup 

现在是重新启动你的应用程序的最后一步

heroku restart

1
重新启动可能不是必要的,但提到这一点是个好主意。 - Francisco Quintero

11

我联系了Heroku支持,他们确认这是最新的gem(我正在使用heroku-2.26.2)的一个bug。

Charlie - 我们已经意识到了与“heroku” gem相关的这个问题,并正在努力解决。

如果您想跟进此问题,请查看以下链接 - https://github.com/heroku/heroku/issues/356

降级回更早版本的“heroku” gem应该可以解决问题。我今天大部分时间都在使用v2.25.0版本而没有出现问题。

使用以下命令进行降级:

gem uninstall heroku

gem install heroku --version 2.25.0
如果您已经安装了多个 gem,可能会看到以下内容:
Select gem to uninstall:
 1. heroku-2.25.0
 2. heroku-2.26.2
 3. All versions
只需卸载 #2,然后重新运行该命令。享受快乐!

1
所有的 gem 现在都已经被弃用了,你需要摆脱它们并安装 Heroku 工具包。https://toolbelt.heroku.com/ - Ghoti

9
完整答案是(对于使用多个数据库的用户): heroku pg:info - 输出以下内容:

=== HEROKU_POSTGRESQL_RED <-- 这是数据库
计划 基础版
状态 可用

heroku pg:reset HEROKU_POSTGRESQL_RED --confirm app_name 更多信息请查看:https://devcenter.heroku.com/articles/heroku-postgresql

8
现在通过他们的Web界面也可以重置数据库。
前往dashboard.heroku.com,选择您的应用程序,然后在附加组件类别下找到数据库,单击它,然后您就可以重置数据库了。 Reset Heroku Database

8
现在与Heroku不同了。请尝试: heroku pg:reset DATABASE --confirm

对于某些应用程序,您仍需要使用SHARED_DATABASE。 - tfwright

7
今天,命令行

heroku pg:reset --db SHARED_DATABASE_URL

对于共享计划无效,我使用以下方法解决:

heroku pg:reset SHARED_DATABASE

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