我需要删除数据库中的所有表而不删除数据库,因为此数据库的用户没有创建数据库权限。
删除所有表但不删除实际数据库的最佳方法是什么?
另外,我们使用rake db:seed
将一些条目添加到其中一个表中,因此我不想使用种子文件。
答案 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指令也重新启动了表,我不明白为什么要删除所有表。
无论如何,也许这个答案也可能有用:
答案 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')