为什么我不能成功使用rake db:drop或rake db:purge?
有效的命令:
- 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
如果存在连接,则无法删除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
environment参数使rake检查初始值设定项。
我和你有同样的问题,这个答案帮助我弄明白了。 您可能手动编辑了一些迁移,这导致了这个问题。 最后,我不得不手动丢弃所有表格,它有效。 但仅仅删除schema_migrations表就足够了,其中rails存储已经运行了迁移。 因此,如果您负担得起,请尝试删除所有表,或者只删除schema_migrations表。
编辑:不幸的是,它仍然无法正常工作,手动删除解决了schema.rb的重新创建,但db:drop仍未运行。 所以问题仍然存在。
如果您有数据库的备份,则可以使用pg_restore重置数据库:
pg_restore -U db_user -d db_name -h db_host .path/to/db_dump
这将使用备份的内容重置您的数据库。
- Rails用范围扩展字段,PG不喜欢它
- 为什么此ActiveRecord语句在Server中失败但在Console中失败
- finder_sql不使用Rails解析字符串
- Rails – SQL查询返回所有指定相关对象的对象(has_many through)
- 在PostgreSQL中使用Sequel gem插入一个数组
- Postgres随机停止工作(Rails,PGSQL.5432)
- 未定义的方法auto_upgrade! 将Sinatra / DataMapper应用程序推送到Heroku时
- Rails,其中查询链带有或用于数组输入
- 如何使用PSequel GUI连接到Mac上的localhost PostgreSQL?