2013-02-26 18 views
5

prima della semina dati di prova nella tabella DB ho bisogno di troncare la tabella (ho bisogno di resettare chiave primaria), sto cercando di farlo in questo modo:Sementi Rails: come troncare la tabella DB?

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

ma quando mi stampare i dati da DB, ho continua a non vedere il conteggio della chiave primaria da 1.

Cosa sto facendo male?

EDIT:

Inoltre, ho provato manualmente eseguito in terminale per database PostgreSQL

truncate users 

Ma il conteggio primaria ancora non parte da 1.

SOLUZIONE :

In Postgres, eseguire:

ALTER SEQUENCE users_id_seq RESTART WITH 1; 
+0

Questo non è proprio un problema di rotaie. Dovrai eseguire l'SQL corretto per il tuo database per modificare il valore auto_increment. Potresti abbandonare il tavolo e ricrearlo, ma potrebbe essere eccessivo. Vedi questa domanda sullo stack overflow per maggiori informazioni: http://stackoverflow.com/questions/6241684/reset-primary-key-auto-increment –

+0

Grazie Scott, se non ti dispiace, pubblicherò una soluzione che mi ha aiutato . – user984621

risposta

6

In MySQL, TRUNCATE table; elimina tutte le righe e azzera il contatore di incremento automatico.

In PostgreSQL non lo fa automaticamente. È possibile utilizzare TRUNCATE TABLE table RESTART IDENTITY;.

Solo per la cronaca: In SQLite, non v'è alcuna dichiarazione TRUNCATE, invece, è

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

Dall'interno di Rails in un csv_upload.rb ho usato e ha funzionato.

ActiveRecord :: Base.connection.execute ('TRUNCATE nome_modello RESTART IDENTITA')

3

Nel caso il vostro DB è postgres, si può fare qualcosa di simile per troncare le tabelle db dei vostri modelli:

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

È bellissimo. – skwidbreth

3

Questo è troppo tardi Sto rispondendo a questa domanda ma spero che questo possa aiutare qualcun altro.

Hai per installare (O è possibile aggiungere al vostro gem 'database_cleaner' Gemfile) un GEM chiamato Database Cleaner che aiuta a pulire la vostra base di dati senza compromettere il database schema._

Per pulire il database ogni volta che ogni volta che fate rake db:seed quindi incollare

DatabaseCleaner.clean_with(:truncation) 

sulla parte superiore del file seme. Cancella il database e avvia nuovamente il conteggio dal numero 1.


responsabilità: Questa risposta aggiornata è testato, e perfettamente funzionante nel mio sistema.

Problemi correlati