为什么我不能成功使用rake db:drop或rake db:purge?

时间:2015-01-08 15:51:50

标签: ruby-on-rails database postgresql

有效的命令:

  • rake db:migrate
  • rake db:rollback
  • rake db:seed

不能执行的命令:

  • rake db:drop
  • rake db:drop:all
  • rake db:migrate:reset
  • rake db:purge

如果我使用db:rollback足够多次(或使用STEP),我的数据库会成功删除,但不会在我使用db:drop / db:drop:all时删除。 db:migrate:reset和db:purge保持所有数据不变。通过数据库监视器运行跟踪,观察development.log,系统日志和查看数据库查询(似乎没有SQL查询为这些命令运行。)没有错误。

运行:

  • Rails 4.2
  • postgres 9.4
  • CentOS 7

3 个答案:

答案 0 :(得分:1)

如果存在连接,则无法删除PG数据库。

除非你使用这个魔法:

rake environment db:drop

将它放在你的初始化器中并运行这个命令:

{{1}}

environment参数使rake检查初始化器。

答案 1 :(得分:0)

我和你有同样的问题,answer让我弄明白了。您可能手动编辑了一些迁移,这导致了这个问题。最后,我不得不手工丢弃所有表格,它有效。但仅仅删除schema_migrations表就足够了,其中rails存储已经运行了迁移。因此,如果您负担得起,请尝试删除所有表,或者只删除schema_migrations表。

编辑:不幸的是,它仍然无法正常工作,手动删除解决了schema.rb的重新创建,但db:drop仍未运行。所以问题仍然存在。

答案 2 :(得分:0)

如果您有数据库的备份,则可以使用pg_restore重置数据库:

pg_restore -U db_user -d db_name -h db_host .path/to/db_dump

这将使用备份内容重置您的数据库。