Programing

Rails DB 마이그레이션-테이블 삭제 방법

lottogame 2020. 2. 14. 21:53
반응형

Rails DB 마이그레이션-테이블 삭제 방법


필요하다고 생각되는 테이블을 추가했지만 더 이상 테이블을 사용할 계획이 없습니다. 해당 테이블을 어떻게 제거해야합니까?

이미 마이그레이션을 실행 했으므로 테이블이 데이터베이스에 있습니다. 나는 rails generate migration이것을 처리 할 수 ​​있어야하지만 아직 방법을 찾지 못했습니다.

난 노력 했어:

rails generate migration drop_tablename

그러나 그것은 단지 빈 마이그레이션을 생성했습니다.

Rails에서 테이블을 삭제하는 "공식적인"방법은 무엇입니까?


항상 원하는 코드를 갖기 위해 단순히 마이그레이션을 생성 할 수있는 것은 아닙니다. 빈 마이그레이션을 만든 다음 필요한 코드로 채울 수 있습니다.

마이그레이션에서 다양한 작업을 수행하는 방법에 대한 정보는 다음을 참조하십시오.

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

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

drop_table :table_name

먼저 원하는 이름으로 빈 마이그레이션을 생성하십시오. 적절한 날짜를 만들기 때문에 이런 식으로하는 것이 중요합니다.

rails generate migration DropProductsTable

이렇게하면 20111015185025_drop_products_table.rb와 같이 / db / migrate /에 .rb 파일이 생성됩니다.

이제 다음과 같이 해당 파일을 편집하십시오.

class DropProductsTable < ActiveRecord::Migration
  def up
    drop_table :products
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

내가 추가 한 유일한 것은 drop_table :productsand raise ActiveRecord::IrreversibleMigration입니다.

그런 다음 실행 rake db:migrate하면 테이블이 삭제됩니다.


마이그레이션을 수동으로 작성하십시오. 예를 들어 rails g migration DropUsers.

마이그레이션 코드에 관해서는 Maxwell Holder의 포스트 Rails Migration Checklist를 인용하겠습니다.

불량-실행 rake db:migraterake db:rollback실패

class DropUsers < ActiveRecord::Migration
  def change
    drop_table :users
  end
end

GOOD-마이그레이션을 되돌릴 수 없음을 나타냅니다.

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

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

$rails console

그런 다음 다음을 입력하십시오.

ActiveRecord::Migration.drop_table(:table_name)

그리고 나를 위해 일했습니다!


다음 명령을 사용하여 새 마이그레이션 파일을 작성해야합니다

rails generate migration drop_table_xyz

drop_table 코드를 새로 생성 된 마이그레이션 파일 (db / migration / xxxxxxx_drop_table_xyz)에 작성하십시오.

drop_table :tablename

또는 마이그레이션하지 않고 테이블을 삭제하려면 레일 콘솔을 열면됩니다.

$ rails c

다음 명령을 실행하십시오.

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

또는 더 간단한 명령을 사용할 수 있습니다

ActiveRecord::Migration.drop_table(:table_name)

  1. 레일 g 마이그레이션 drop_users
  2. 마이그레이션 수정
    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users do |t|
          t.string :name
          t.timestamps
        end
      end
    end
  1. 레이크 db : 마이그레이션

완전히 "공식적"이 되려면 새로운 마이그레이션을 만들고 drop_table을 self.up에 넣어야합니다. self.down 메소드는 테이블을 완전히 재생성하기위한 모든 코드를 포함해야합니다. 마이그레이션을 생성 할 때 schema.rb에서 해당 코드를 가져 왔을 수 있습니다.

더 이상 필요하지 않다는 것을 알고있는 테이블을 작성하기 위해 코드를 작성하는 것은 조금 이상하게 보이지만, 모든 마이그레이션 코드를 완전하고 "공식"으로 유지하는 것이 맞습니까?

방금 삭제해야 할 테이블에 대해이 작업을 수행했지만 정직하게 "다운"을 테스트하지 않았으며 왜 그런지 잘 모르겠습니다.


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

$ rails c

그런 다음 콘솔 에이 명령을 붙여 넣으십시오.

ActiveRecord::Migration.drop_table(:table_name)

대체 TABLE_NAME을 삭제하려는 테이블.

터미널에서 직접 테이블을 삭제할 수도 있습니다. 응용 프로그램의 루트 디렉토리에 입력 하고이 명령을 실행하십시오.

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

가이드에있는대로 마이그레이션을 롤백 할 수 있습니다.

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

이 방법으로 롤백하고 마이그레이션을 되돌릴 수 있습니다


간단하고 공식적인 방법은 다음과 같습니다.

  rails g migration drop_tablename

이제 db / migrate로 가서 drop_tablename을 파일 이름으로 포함하는 파일을 찾아서 편집하십시오.

    def change
      drop_table :table_name
    end

그런 다음 실행해야합니다

    rake db:migrate 

콘솔에서.


레일 콘솔 열기

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

마이그레이션 롤백, 다시 실행 등을 계속 사용하면서 예외를 발생 시키거나 지금 빈 테이블을 다시 작성하려는 시도 대신-

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

ActiveRecord::Base.connection.drop_table :table_name


마이그레이션 스크립트에서 작동하도록 할 수 없었기 때문에이 솔루션을 진행했습니다. 터미널을 사용하여 레일 콘솔을 입력하십시오.

rails c

유형

ActiveRecord::Migration.drop_table(:tablename)

그것은 나를 위해 잘 작동합니다. 이전 테이블이 제거됩니다. 달리는 것을 잊지 마세요

rails db:migrate

테이블과 함께 마이그레이션 스크립트를 삭제해야했습니다 ...

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"

당신이 할 수있는 가장 좋은 방법은

rails g migration Drop_table_Users

다음 다음을 수행

rake db:migrate

운영

rake db:migrate:down VERSION=<version>

<version>되돌리려는 마이그레이션 파일의 버전 번호는 어디에 있습니까 ?

예:-

rake db:migrate:down VERSION=3846656238

특정 테이블을 삭제하려면 할 수 있습니다

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

그렇지 않으면 모든 데이터베이스를 삭제하려면 할 수 있습니다

$rails db:drop

이 명령을 실행하십시오 :-

rails g migration drop_table_name

그때:

rake db:migrate

또는 MySql 데이터베이스를 사용하는 경우 :

  1. 데이터베이스로 로그인
  2. show databases;
  3. show tables;
  4. drop table_name;

아무도 SQL에서 그것을하는 방법을 찾고 있다면.

rails dbconsole터미널에서 입력

암호를 입력

콘솔에서

USE db_name;

DROP TABLE table_name;

exit

스키마에서 마이그레이션 파일 및 테이블 구조를 제거하는 것을 잊지 마십시오


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

run :-$ rails 마이그레이션을 생성합니다. DropTablename

exp :-$ 레일은 마이그레이션을 생성합니다.


스키마에서 테이블을 삭제하려면 아래 작업을 수행하십시오.

rails db:rollback

참고 URL : https://stackoverflow.com/questions/4020131/rails-db-migration-how-to-drop-a-table



반응형