티스토리 뷰

Tech

RubyOnRails 인덱스 추가하기

밤백수 2023. 4. 24. 21:27

먼저 User 테이블을 생성하기 위해서 터미널에서 아래 명령 실행

$ rails g scaffold User username:string nickname:string group:string

실행하면 아래의 마이그레이션 파일이 생성된다

# db/migrate/20230424110200_create_users.rb

class CreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      t.string :username
      t.string :nickname
      t.string :group

      t.timestamps
    end
  end
end

이 테이블에는 인덱스가 생성되지 않았다. 여기 인덱스를 추가하려면?

 

인덱스 추가

1. 터미널 명령어로 인덱스 추가

$ rails generate migration add_unique_index_to_users_username
$ rails generate migration add_unique_index_to_users_group_and_username

아래와 같은 마이그레이션 파일이 추가된다

# db/migrate/20230424110300_add_unique_index_to_users_username.rb
class AddUniqueIndexToUsersUsername < ActiveRecord::Migration[7.0]
  def change
    add_index :users, :username, unique: true
  end
end

# db/migrate/20230424120000_add_unique_index_to_users_group_and_username.rb
class AddUniqueIndexToUsersGroupAndUsername < ActiveRecord::Migration[7.0]
  def change
    add_index :users, [:group, :username], unique: true
  end
end

2. 좀 편한 방법

기존 마이그레이션 파일에 명령 추가..

운영서버에 반영하기 전에는 이렇게 하는게 편하다

# db/migrate/20230424110200_create_users.rb

class CreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      t.string :username
      t.string :nickname
      t.string :group

      t.timestamps
    end
    add_index :users, :username, unique: true
    add_index :users, [:group, :username], unique: true
  end
end

인덱스 삭제

삭제는 조금 더 신중해야 하는데

운영서버에 반영된 후에는 이렇게 하고 필요한 경우에 데이터마이그레이션 코드도 추가 해 줘야한다.

1. 터미널 명령어로 인덱스 삭제

rails generate migration remove_unique_index_from_users_group_and_username

..... 너무길다

class RemoveUniqueIndexFromUsersGroupAndUsername < ActiveRecord::Migration[7.0]
  def change
    remove_index :users, [:group, :username]
  end
end

2. 좀 편한 방법

rails generate migration remove_index_from_users

이렇게 대충 치면... 대충 빈게 생성되는데...

# 20230424122540_remove_index_from_users
class RemoveIndexFromUsers < ActiveRecord::Migration[7.0]
  def change
  end
end

remove index문장을 붙여넣어주면된다

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함