rake db:reset删除所有表但不删除数据库

时间:2014-04-22 17:57:09

标签: ruby-on-rails postgresql rake

我需要删除数据库中的所有表而不删除数据库,因为此数据库的用户没有创建数据库权限。

删除所有表但不删除实际数据库的最佳方法是什么?

另外,我们使用rake db:seed将一些条目添加到其中一个表中,因此我不想使用种子文件。

5 个答案:

答案 0 :(得分:8)

这是我在查看Truncate方法后最终提出的解决方案。

namespace :db do
  desc "Erase all tables"
  task :clear => :environment do
    conn = ActiveRecord::Base.connection
    tables = conn.tables
    tables.each do |table|
      puts "Deleting #{table}"
      conn.drop_table(table)
    end
  end
end

答案 1 :(得分:2)

进行测试,我建议使用:

rake db:test:prepare

它会根据您的db/schema.rb

重新生成所有表格

答案 2 :(得分:0)

你可以通过以下rake任务实现这一点(我之前在这里找到)

namespace :db do
  desc "Truncate all tables"
  task :truncate => :environment do
    conn = ActiveRecord::Base.connection
    tables = conn.execute("show tables").map { |r| r[0] }
    tables.delete "schema_migrations"
    tables.each { |t| conn.execute("TRUNCATE #{t}") }
  end
end

编辑添加我之前找到的问题的链接:

Delete everything from all tables (in Activerecord)

如果truncate指令也重新启动了表,我不明白为什么要删除所有表。

无论如何,也许这个答案也可能有用:

https://stackoverflow.com/a/2789515/1639291

https://stackoverflow.com/a/1197218/1639291

答案 3 :(得分:0)

如果你运行rake -P | grep db,你会看到Rails内置的所有数据库任务,但它们似乎都没有做你想要的。我认为唯一的方法是使用迁移。 This answer告诉你如何。

答案 4 :(得分:0)

解决:

  

PG :: DependentObjectsStillExist:错误:无法删除表   location_types,因为其他对象依赖于此

强制执行CASCADE。

unique_cl_data[row_idx][3] = cl_json.replace('"', '\\"').replace('\n', '\\n')