2013-02-26 67 views
5

之前播種的測試數據到數據庫表中我需要截斷表(我需要重新設置主鍵),我試圖做的是這樣的:Rails種子:如何截斷數據庫表?

ActiveRecord::Base.connection.execute("TRUNCATE users") 

但是當我從數據庫打印出來的數據,我仍然沒有看到從1計數主鍵。

我在做什麼錯?

編輯:

而且,我已經試過手動在終端運行PostgreSQL數據庫

truncate users 

但主要數仍無法從1

解決方案啓動:

在Postgres中運行:

ALTER SEQUENCE users_id_seq RESTART WITH 1; 
+0

這不是一個真正的鐵軌問題。您需要爲數據庫執行正確的SQL以更改auto_increment值。你可以放下桌子並重新創建它,但這可能是矯枉過正的。看到這個問題堆棧溢出瞭解更多信息:http://stackoverflow.com/questions/6241684/reset-primary-key-auto-increment – 2013-02-26 22:06:42

+0

謝謝斯科特,如果你不介意,我會發佈一個解決方案,幫助我。 – user984621 2013-02-26 22:13:48

回答

6

MySQL的TRUNCATE table;刪除所有行重置自動遞增計數器。

PostgreSQL它不會自動執行此操作。您可以使用TRUNCATE TABLE table RESTART IDENTITY;

只是爲了記錄:在SQLite的,沒有TRUNCATE說法,相反,它是

DELETE FROM table; 
DELETE FROM sqlite_sequence WHERE name='table'; 
0

從Rails內部在我使用的csv_upload.rb和它的工作。

的ActiveRecord :: Base.connection.execute( 'TRUNCATE MODEL_NAME RESTART IDENTITY')

3

如果你的數據庫是Postgres的,你可以做這樣的事情截斷你的模型的數據庫表:

[ 
    MyModel1, 
    MyModel2, 
    MyModel3 
].each do |m| 
    ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{m.table_name} RESTART IDENTITY;") 
end 
+0

很漂亮。 – skwidbreth 2016-07-07 01:27:05

3

這太遲了我正在回答這個問題,但我希望這會幫助別人。

您已經安裝(也可以添加gem 'database_cleaner'到你的Gemfile)一個名爲Database Cleaner創業板,這有助於清理數據庫,而不會影響你的數據庫schema._

要清潔您的數據庫中的每個只要你做的時間rake db:seed然後粘貼

DatabaseCleaner.clean_with(:truncation) 

在您的種子文件的頂部。 它會清除您的數據庫並重新從1開始計數。


免責聲明:此更新後的答案進行測試,並在我的系統完美的工作。