【问题标题】:Why can't I successfully use rake db:drop or rake db:purge?为什么我不能成功使用 rake db:drop 或 rake db:purge?
【发布时间】:2015-03-06 19:18:32
【问题描述】:

有效的命令:

  • rake db:迁移
  • rake db:rollback
  • 耙分贝:种子

不适用的命令:

  • 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

【问题讨论】:

  • 您正在修改的数据库是否有任何打开的连接?如果有打开的连接,PG 不会删除数据库。
  • @PhilipHallstrom 不,我不知道。即使我在启动数据库后立即发出命令也会发生这种情况(它也是一个单用户本地虚拟机,没有其他任何东西在运行。)
  • 我有同样的问题,当我将 database.yml 更改为 SQLite 时,它​​会重新创建数据库并更新 schema.rb。当我连接到 Postgres 时,它什么也不做。这不是数据库中另一个会话的问题(我已经调查过),这是不同的。作为J B,我根本看不到任何输出。

标签: ruby-on-rails database postgresql


【解决方案1】:

如果存在连接,则不能删除 PG 数据库。

除非你使用这个魔法:

# config/initializers/postgresql_database_tasks.rb
module ActiveRecord
  module Tasks
    class PostgreSQLDatabaseTasks
      def drop
        establish_master_connection
        connection.select_all "select pg_terminate_backend(pg_stat_activity.pid) from pg_stat_activity where datname='#{configuration['database']}' AND state='idle';"
        connection.drop_database configuration['database']
      end
    end
  end
end

将其放入初始化程序并运行以下命令:

rake environment db:drop

环境参数使 rake 检查初始化器。

【讨论】:

    【解决方案2】:

    我和你有同样的问题,这个answer 帮助我解决了这个问题。您可能正在手动编辑一些迁移,这导致了这个问题。最后我不得不手动放下所有的桌子,它起作用了。但是只需删除 schema_migrations 表就足够了,rails 存储已经在该表中运行了迁移。因此,如果您负担得起,请尝试删除所有表,或者只删除 schema_migrations 表。

    编辑: 不幸的是,它仍然不起作用,手动删除解决了 schema.rb 的重新创建问题,但 db:drop 仍然没有运行。所以问题仍然存在。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        相关资源
        最近更新 更多