복붙노트

[RUBY-ON-RAILS] DB 마이그레이션 난간 - 어떻게 테이블을 삭제하려면?

RUBY-ON-RAILS

DB 마이그레이션 난간 - 어떻게 테이블을 삭제하려면?

나는 내가 그것을 사용에 대한 계획을 필요로가는,하지만 지금은 더 이상 있다고 생각하는 테이블을 추가했습니다. 어떻게 그 테이블을 제거해야합니까?

테이블 내 데이터베이스에 그래서 나는 이미 마이그레이션을 실행했습니다. 나는 그림 레일 마이그레이션이 처리 할 수 ​​있어야 생성,하지만 난 방법을 아직 파악하지 않았습니다.

난 노력 했어:

rails generate migration drop_tablename

하지만 그건 그냥 빈 마이그레이션을 생성.

레일에서 테이블을 삭제하기 위해 "공식적인"방법은 무엇입니까?

해결법

  1. ==============================

    1.당신은 항상 단순히 이미 당신이 원하는 코드를 가지고 마이그레이션을 생성 할 수 없습니다. 당신은 빈 마이그레이션을 만든 다음 당신이 필요로하는 코드로 채울 수 있습니다.

    당신은 항상 단순히 이미 당신이 원하는 코드를 가지고 마이그레이션을 생성 할 수 없습니다. 당신은 빈 마이그레이션을 만든 다음 당신이 필요로하는 코드로 채울 수 있습니다.

    당신은 여기에 이전에 다른 작업을 수행하는 방법에 대한 정보를 찾을 수 있습니다 :

    http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

    보다 구체적으로, 다음과 같은 방법을 사용하여 테이블을 삭제하는 방법을 볼 수 있습니다 :

    drop_table :table_name
    
  2. ==============================

    2.먼저 당신이 원하는 어떤 이름을 가진 빈 마이그레이션을 생성합니다. 그것은 적절한 날짜를 생성하기 때문에 그것은이 방법을 수행하는 것이 중요합니다.

    먼저 당신이 원하는 어떤 이름을 가진 빈 마이그레이션을 생성합니다. 그것은 적절한 날짜를 생성하기 때문에 그것은이 방법을 수행하는 것이 중요합니다.

    rails generate migration DropProductsTable
    

    이 / DB / 마이그레이션 / 같은 20111015185025_drop_products_table.rb에서 .rb 파일을 생성합니다

    이제 편집 파일은 다음과 같이하는 것이 :

    class DropProductsTable < ActiveRecord::Migration
      def up
        drop_table :products
      end
    
      def down
        raise ActiveRecord::IrreversibleMigration
      end
    end
    

    추가 된 유일한 것은 내가 DROP_TABLE했다 : 제품과 인상 액티브 :: IrreversibleMigration.

    마이그레이션 그것은 당신을 위해 테이블을 삭제합니다 : 다음 레이크 DB를 실행합니다.

  3. ==============================

    3.수동으로 마이그레이션을 작성합니다. 예를 들면 실행은 g 마이그레이션 DropUsers 레일.

    수동으로 마이그레이션을 작성합니다. 예를 들면 실행은 g 마이그레이션 DropUsers 레일.

    난 그냥 맥스웰 홀더의 게시물을 인용거야 마이그레이션의 코드로 마이그레이션 체크리스트 레일

    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users
      end
    end
    
    class DropUsers < ActiveRecord::Migration
      def up
        drop_table :users
      end
    
      def down
        fail ActiveRecord::IrreversibleMigration
      end
    end
    
    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users do |t|
          t.string :email, null: false
          t.timestamps null: false
        end
      end
    end
    
  4. ==============================

    4.여기에 제공된 답변이 제대로 작동 동안, 나는, 내가 여기에 그것을 발견 조금 더 '간단'뭔가를 원 : 링크를 먼저 레일 콘솔을 입력 :

    여기에 제공된 답변이 제대로 작동 동안, 나는, 내가 여기에 그것을 발견 조금 더 '간단'뭔가를 원 : 링크를 먼저 레일 콘솔을 입력 :

    $rails console
    

    그럼 그냥 입력 :

    ActiveRecord::Migration.drop_table(:table_name)
    

    그리고, 다 나를 위해 일한!

  5. ==============================

    5.당신은 다음 명령을 사용하여 새 마이그레이션 파일을 만들 필요가

    당신은 다음 명령을 사용하여 새 마이그레이션 파일을 만들 필요가

    rails generate migration drop_table_xyz
    

    및 (dB / 이동 / xxxxxxx_drop_table_xyz)와 같은 새로 생성 된 마이그레이션 파일에 DROP_TABLE 코드를 작성

    drop_table :tablename
    

    마이그레이션없이 테이블을 삭제하고 싶다면 또는 단순히 개방 레일에 의해 콘솔

    $ rails c
    

    그리고 다음 명령을 실행

    ActiveRecord::Base.connection.execute("drop table table_name")
    

    또는 좀 더 단순화 명령을 사용할 수 있습니다

    ActiveRecord::Migration.drop_table(:table_name)
    
  6. ==============================

    6.

        class DropUsers < ActiveRecord::Migration
          def change
            drop_table :users do |t|
              t.string :name
              t.timestamps
            end
          end
        end
    
  7. ==============================

    7.나는, 새로운 마이그레이션을 작성해야하고, self.up.에 DROP_TABLE 둘 것입니다 완전히 "공식적인"이라고 생각 self.down 방법은 전체 테이블을 다시 모든 코드를 포함해야합니다. 아마도 그 코드는 단지 마이그레이션을 만들 때 schema.rb에서 수행 할 수있다.

    나는, 새로운 마이그레이션을 작성해야하고, self.up.에 DROP_TABLE 둘 것입니다 완전히 "공식적인"이라고 생각 self.down 방법은 전체 테이블을 다시 모든 코드를 포함해야합니다. 아마도 그 코드는 단지 마이그레이션을 만들 때 schema.rb에서 수행 할 수있다.

    그것은 당신이 더 이상 필요로하지 않을 알고있는 테이블을 생성하는 코드를 넣어, 이상한 조금 보인다, 그러나 그것은 완전하고 "공식적인"모든 마이그레이션 코드를 유지하는 것, 맞죠?

    난 그냥 내가 왜 것 "다운"을하지 않도록주의를 테스트하지 않았다 솔직히 드롭하는 데 필요한 테이블이를했지만.

  8. ==============================

    8.당신은 단순히 레일 콘솔에서 테이블을 삭제할 수 있습니다. 먼저 콘솔을 엽니 다

    당신은 단순히 레일 콘솔에서 테이블을 삭제할 수 있습니다. 먼저 콘솔을 엽니 다

    $ rails c
    

    다음 콘솔에서이 명령을 붙여

    ActiveRecord::Migration.drop_table(:table_name)
    

    삭제하려는 테이블과 테이블 _ 이름을 바꿉니다.

    당신은 또한 터미널에서 직접 테이블을 드롭 할 수 있습니다. 당신의 응용 프로그램의 루트 디렉토리에 입력하고이 명령을 실행

    $ rails runner "Util::Table.clobber 'table_name'"
    
  9. ==============================

    9.당신은 마이그레이션에게이 가이드에있는 방법을 롤백 할 수 있습니다 :

    당신은 마이그레이션에게이 가이드에있는 방법을 롤백 할 수 있습니다 :

    http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations

    마이그레이션을 생성합니다 :

    rails generate migration revert_create_tablename
    

    마이그레이션을 쓰기 :

    require_relative '20121212123456_create_tablename'
    
    class RevertCreateTablename < ActiveRecord::Migration[5.0]
      def change
        revert CreateTablename    
      end
    end
    

    당신은 또한 롤백 할 수 및 마이그레이션을 되 돌리는 데 사용할 수있는이 방법

  10. ==============================

    10.간단하고 공식적인 방법이 될 것입니다 :

    간단하고 공식적인 방법이 될 것입니다 :

      rails g migration drop_tablename
    

    이제이에 파일 이름과 편집을 같이 drop_tablename가 포함 된 DB / 마이그레이션 및 파일에 대한보기로 이동합니다.

        def change
          drop_table :table_name
        end
    

    그럼 당신은 실행해야

        rake db:migrate 
    

    콘솔에.

  11. ==============================

    11.당신이 콘솔을 레일 ​​열기

    당신이 콘솔을 레일 ​​열기

    ActiveRecord::Base.connection.execute("drop table table_name")
    
  12. ==============================

    12.나는 앞서이 솔루션에 갔다 있도록 마이그레이션 스크립트를 사용하여 작업 할 수 없습니다. 레일 터미널을 사용하여 콘솔 입력 :

    나는 앞서이 솔루션에 갔다 있도록 마이그레이션 스크립트를 사용하여 작업 할 수 없습니다. 레일 터미널을 사용하여 콘솔 입력 :

    rails c
    

    유형

    ActiveRecord::Migration.drop_table(:tablename)
    

    그것은 나를 위해 잘 작동합니다. 이것은 위의 표를 제거합니다. 실행하는 것을 잊지 마세요

    rails db:migrate
    
  13. ==============================

    13.아직 재실행 등, 마이그레이션 롤백을 가능하게하고있는 동안 - 예외를 발생하거나 지금 빈 테이블을 다시 시도에 대안 -

    아직 재실행 등, 마이그레이션 롤백을 가능하게하고있는 동안 - 예외를 발생하거나 지금 빈 테이블을 다시 시도에 대안 -

    def change
      drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?('users')
    end
    
  14. ==============================

    14.액티브 :: Base.connection.drop_table : 테이블 _

    액티브 :: Base.connection.drop_table : 테이블 _

  15. ==============================

    15.나는 테이블 자체와 함께 우리의 이주 스크립트를 삭제하는 데 필요한 ...

    나는 테이블 자체와 함께 우리의 이주 스크립트를 삭제하는 데 필요한 ...

    class Util::Table < ActiveRecord::Migration
    
     def self.clobber(table_name)   
        # drop the table
        if ActiveRecord::Base.connection.table_exists? table_name
          puts "\n== " + table_name.upcase.cyan + " ! " 
               << Time.now.strftime("%H:%M:%S").yellow
          drop_table table_name 
        end
    
        # locate any existing migrations for a table and delete them
        base_folder = File.join(Rails.root.to_s, 'db', 'migrate')
        Dir[File.join(base_folder, '**', '*.rb')].each do |file|
          if file =~ /create_#{table_name}.rb/
            puts "== deleting migration: " + file.cyan + " ! "
                 << Time.now.strftime("%H:%M:%S").yellow
            FileUtils.rm_rf(file)
            break
          end
        end
      end
    
      def self.clobber_all
        # delete every table in the db, along with every corresponding migration 
        ActiveRecord::Base.connection.tables.each {|t| clobber t}
      end
    
    end
    

    터미널 창에서 다음을 실행합니다 :

    $ rails runner "Util::Table.clobber 'your_table_name'"
    

    또는

    $ rails runner "Util::Table.clobber_all"
    
  16. ==============================

    16.당신이 할 수있는 최선의 방법입니다

    당신이 할 수있는 최선의 방법입니다

    rails g migration Drop_table_Users
    

    다음을 수행

    rake db:migrate
    
  17. ==============================

    17.운영

    운영

    rake db:migrate:down VERSION=<version>
    

    여기서 <버전>은 되돌리려 마이그레이션 파일의 버전 번호입니다.

    예:-

    rake db:migrate:down VERSION=3846656238
    
  18. ==============================

    18.만약 누군가가 SQL에서 작업을 수행하는 방법을 찾고있다.

    만약 누군가가 SQL에서 작업을 수행하는 방법을 찾고있다.

    레일 형 단말로부터 dbconsole

    암호를 입력

    콘솔에서 할

    사용의 DB_NAME;

    DROP의 표 TABLE_NAME;

    출구

    스키마 마이그레이션 파일 및 테이블 구조를 제거하는 것을 잊지 말아 줘

  19. ==============================

    19.특정 테이블을 삭제하려는 경우 당신은 할 수있다

    특정 테이블을 삭제하려는 경우 당신은 할 수있다

    $ rails db:migrate:up VERSION=[Here you can insert timestamp of table]
    

    귀하의 모든 데이터베이스를 삭제하려면, 그렇지 않은 경우는 할 수

    $rails db:drop
    
  20. ==============================

    20.테이블 삭제 / 마이그레이션

    테이블 삭제 / 마이그레이션

    운영:- $ 레일 마이그레이션 DropTablename을 생성

    특급 - $ 레일 마이그레이션 DropProducts을 생성

  21. ==============================

    21.이 명령을 실행 -

    이 명령을 실행 -

    rails g migration drop_table_name
    

    그때:

    rake db:migrate
    

    또는 다음 MySQL 데이터베이스를 사용하는 경우 :

  22. ==============================

    22.스키마에서 테이블을 삭제하려면 동작 아래 수행 -

    스키마에서 테이블을 삭제하려면 동작 아래 수행 -

    rails db:rollback
    
  23. from https://stackoverflow.com/questions/4020131/rails-db-migration-how-to-drop-a-table by cc-by-sa and MIT license