Quero que os valores da chave primária comecem de 1 novamente.
ruby-on-rails
yukas
fonte
fonte
Person.connection.execute('delete from people' )
Person.connection.execute("update sqlite_sequence set seq = 0 where name = 'People'" )
ActiveRecord::Base.connection.execute("DELETE from 'yourtablename'")
e funcionou porque me daria um erro que dissesqlite_sequence where name = 'yourtablename' is not a valid table name
ou algo parecido.Muitas pessoas (como eu) vêm aqui para descobrir como deletar todos os dados da tabela. Aqui está:
$ rails console > ModelName.delete_all
ou
> ModelName.destroy_all
destroy_all verifica dependências e retornos de chamada e leva um pouco mais de tempo. delete_all é uma consulta SQL direta.
Mais informações aqui: http://apidock.com/rails/ActiveRecord/Base/delete_all/class
fonte
Tenho usado o seguinte no console do Rails para excluir tudo na tabela e, em seguida, redefinir o contador de índice (Ruby 2 e Rails 4):
> ModelName.delete_all > ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
fonte
model_name
no comando reset precisa para o plural, como o nome real da tabela NÃO o nome singular do modelo.ActiveRecord::Base.connection.reset_pk_sequence!(:plural_model_name)
.O link de @khelll é útil. O comando que você deseja truncar uma tabela é:
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
fonte
Desde Rails 4.2 você pode usar
truncate
diretamente em uma conexão ActiveRecord :ActiveRecord::Base.connection.truncate(:table_name)
Isso limpa todos os dados e zera os contadores de incremento automático na tabela. Funciona em MySQL e Postgres, não funciona em Sqlite.
fonte
Adicione
gem 'database_cleaner'
ao seu Gemfile, execute$ bundle install
e:> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
Você pode especificar mais tabelas:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
Se você deixar o último parâmetro de fora, ele truncará todo o banco de dados:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
fonte
Estou usando Rails 4.2.0 e Sqlite3
Aqui está o que funcionou para mim (considerando um pouco de todos os itens acima):
$ rails c > ModelName.delete_all > ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
Consegui então adicionar novos registros à minha tabela com o índice começando em 1
fonte
Para qualquer pessoa que esteja procurando uma resposta para essa pergunta quando o banco de dados for Postgres, você pode fazer isso no console do Rails:
rails console irb(main):028:0> ActiveRecord::Base.connection.execute("SELECT SETVAL('accounts_id_seq', 1)")
Onde o
accounts
emaccounts_id_seq
é o nome da tabela.fonte