我需要刪除數據庫中的所有表而不刪除數據庫,因爲此數據庫的用戶沒有創建數據庫特權。rake db:reset刪除所有表,但不刪除數據庫
刪除所有表但不是實際數據庫的最佳方法是什麼?
此外,我們使用rake db:seed
添加一些條目到一個表中,所以我不想使用種子文件。
我需要刪除數據庫中的所有表而不刪除數據庫,因爲此數據庫的用戶沒有創建數據庫特權。rake db:reset刪除所有表,但不刪除數據庫
刪除所有表但不是實際數據庫的最佳方法是什麼?
此外,我們使用rake db:seed
添加一些條目到一個表中,所以我不想使用種子文件。
所有表這是我最終與看截斷方法後,想出瞭解決方案。
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
如果有外鍵引用表,它似乎會破壞:( – Hut8
這可能很容易擴展到查看引用其他表的表並首先清除它們,然後清除剩下的部分,也可以非常容易地更新它來清除單個表格,而不是一次清除所有表格。 –
你可以做到這一點有以下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指令也重新啓動你的表。
不管怎樣,也許這答案可能也有幫助:
這是否實際刪除每個表或只刪除每個表中的所有行? –
只截取表格。這不是你想要的嗎? :| – JGutierrezC
我需要刪除所有表,但離開數據庫。然後,我將運行rake:migrate來重新創建所有表。 –
如果運行rake -P | grep db
你會看到所有內置的Rails的數據庫任務,但他們都不做你在找什麼。我相信唯一的方法就是使用遷移。 This answer告訴你如何。
進行測試,我會建議使用:
rake db:test:prepare
它會重新生成基於您db/schema.rb
是否需要通過rake任務完成它?爲什麼不只是生成一個遷移來刪除表? –
刪除所有表的目的是爲了讓我清除數據庫,以便爲測試目的做一個乾淨的設置。理想情況下,我會使用db:reset,但我的數據庫管理員不給我一個可以重新創建數據庫的帳戶。 –
現在還不清楚是否要將數據放入表格或表格本身。請提供更多數據。 –