10 ответов:
чтобы сбросить индекс / первичный ключ в SQLite просто введите:
$ rails console > ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
многие люди (как я) приходят сюда, чтобы найти Как удалить все данные в таблице. Здесь вы идете:
$ rails console > ModelName.delete_allили
> ModelName.destroy_alldestroy_all проверяет зависимости и обратные вызовы, и занимает немного больше времени. delete_all является прямой SQL-запрос.
дополнительная информация здесь:http://apidock.com/rails/ActiveRecord/Base/delete_all/class
я использовал следующее из консоли rails, чтобы удалить все в таблице, а затем сбросить счетчик индекса (Ruby 2 & Rails 4):
> ModelName.delete_all > ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
ссылка@khelll полезна. Команда, которую вы хотите усечь одну таблицу:
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
добавить
gem 'database_cleaner'к вашему Gemfile, run$ bundle installи затем:> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])вы можете указать больше таблиц:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])если вы оставите последний параметр, он будет усекать всю базу данных:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
Я использую Rails 4.2.0 и Sqlite3
вот что сработало для меня (взяв немного из всего вышесказанного):
$ rails c > ModelName.delete_all > ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")затем я смог добавить новые записи в свою таблицу с индексом, начиная с 1
Так как рельсы 4.2 вы можете использовать
truncateнепосредственно на подключение ActiveRecord:ActiveRecord::Base.connection.truncate(:table_name)этой уничтожит все данные и сброс счетчиков автоувеличение в таблице. Работает в MySQL и Postgres,не работа в Sqlite.
Я не думаю, что вы можете сделать это. Однако вы могли бы напишите свою собственную задачу грабли
для вашей информации, вы можете получить список рейк задач, доступных, выполнив:
rake --tasksвы получите что-то вроде:
rake backups:clear # Cleanup Backup files rake clear # Cleanup temporary, log and backup files rake db:fixtures:load # Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y rake db:migrate # Migrate the database through scripts in db/migrate. Target specific version with VERSION=x rake db:schema:dump # Create a db/schema.rb file that can be portably used against any DB supported by AR rake db:schema:load # Load a schema.rb file into the database rake db:sessions:clear # Clear the sessions table rake db:sessions:create # Creates a sessions table for use with CGI::Session::ActiveRecordStore rake db:structure:dump # Dump the database structure to a SQL file rake db:test:clone # Recreate the test database from the current environment's database schema rake db:test:clone_structure # Recreate the test databases from the development structure rake db:test:prepare # Prepare the test database and load the schema rake db:test:purge # Empty the test database rake doc:app # Build the app HTML Files rake doc:clobber_app # Remove rdoc products rake doc:clobber_plugins # Remove plugin documentation rake doc:clobber_rails # Remove rdoc products rake doc:plugins # Generate documation for all installed plugins rake doc:rails # Build the rails HTML Files rake doc:reapp # Force a rebuild of the RDOC files rake doc:rerails # Force a rebuild of the RDOC files rake log:clear # Truncates all *.log files in log/ to zero bytes rake rails:freeze:edge # Lock to latest Edge Rails or a specific revision with REVISION=X (ex: REVISION=4021) or a tag with TAG=Y (ex: TAG=rel_1-1-0) rake rails:freeze:gems # Lock this application to the current gems (by unpacking them into vendor/rails) rake rails:unfreeze # Unlock this application from freeze of gems or edge and return to a fluid use of system gems rake rails:update # Update both configs, scripts and public/javascripts from Rails rake rails:update:configs # Update config/boot.rb from your current rails install rake rails:update:javascripts # Update your javascripts from your current rails install rake rails:update:scripts # Add new scripts to the application script/ directory rake stats # Report code statistics (KLOCs, etc) from the application rake test # Test all units and functionals rake test:functionals # Run the functional tests in test/functional rake test:integration # Run the integration tests in test/integration rake test:plugins # Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name) rake test:recent # Test recent changes rake test:uncommitted # Test changes since last checkin (only Subversion) rake test:units # Run the unit tests in test/unit rake tmp:assets:clear # Clears all files in tmp/test/assets rake tmp:cache:clear # Clears all files and directories in tmp/cache rake tmp:clear # Clear session, cache, and socket files from tmp/ rake tmp:create # Creates tmp directories for sessions, cache, and sockets rake tmp:pids:clear # Clears all files in tmp/pids rake tmp:sessions:clear # Clears all files in tmp/sessions rake tmp:sockets:clear # Clears all files in tmp/sockets
посмотреть здесь, вам все еще может потребоваться небольшая настройка для усечения определенной таблицы.
для тех, кто ищет ответ на этот вопрос, когда база данных Postgres, вы можете сделать это из консоли Rails:
rails console irb(main):028:0> ActiveRecord::Base.connection.execute("SELECT SETVAL('accounts_id_seq', 1)")здесь
accountsнаaccounts_id_seq- имя таблицы.
Comments