Я хочу, чтобы значения первичного ключа снова начинались с 1.
Как reset одна таблица в рельсах?
Ответ 1
В reset индекс/первичный ключ в SQLite просто введите:
$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
Ответ 2
Многие люди (например, я) пришли сюда, чтобы найти, как удалить все данные в таблице. Вот вы:
$ rails console
> ModelName.delete_all
или
> ModelName.destroy_all
destroy_all проверяет зависимости и обратные вызовы и занимает немного больше времени. delete_all - это прямой запрос SQL.
Дополнительная информация здесь: http://apidock.com/rails/ActiveRecord/Base/delete_all/class
Ответ 3
Я использовал следующую консоль rails для удаления всего в таблице, а затем reset счетчика индексов (Ruby 2 и Rails 4):
> ModelName.delete_all
> ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
Ответ 4
Ссылка@khelll полезна. Команда, которую вы хотите усечь одну таблицу:
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name}")
Ответ 5
Добавьте gem 'database_cleaner'
в свой Gemfile, запустите $ bundle install
, а затем:
> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
Вы можете указать другие таблицы:
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
Если вы оставите последний параметр, он усекает всю базу данных:
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
Ответ 6
Я использую Rails 4.2.0 и Sqlite3
Вот что сработало для меня (взяв немного от всего выше):
$ rails c
> ModelName.delete_all
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
Затем я смог добавить новые записи в свою таблицу с индексом, начинающимся с 1
Ответ 7
Я не думаю, что вы можете это сделать. Однако вы можете написать свою собственную команду rake
Для вашей информации вы можете получить список задач рейка, выполнив следующие действия:
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 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 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
Ответ 8
С Rails 4.2 вы можете использовать truncate
непосредственно на Подключение ActiveRecord:
ActiveRecord::Base.connection.truncate(:table_name)
Этот стирает все данные и сбрасывает счетчики автокрементов в таблице. Работает в MySQL и Postgres, не работает в Sqlite.
Ответ 9
Посмотрите здесь, вам все равно понадобится небольшая настройка, чтобы обрезать определенную таблицу.
Ответ 10
Для всех, кто ищет ответ на этот вопрос, когда база данных Postgres, вы можете сделать это с консоли Rails:
rails console
irb(main):028:0> ActiveRecord::Base.connection.execute("SELECT SETVAL('accounts_id_seq', 1)")
Где accounts
в accounts_id_seq
- это имя таблицы.