반응형
Ruby on Rails ActiveRecord 마이그레이션에서 너무 긴 색인 이름을 어떻게 처리합니까?
네 개의 관련 테이블의 외래 키에서 생성되는 고유 인덱스를 추가하려고합니다.
add_index :studies,
["user_id", "university_id", "subject_name_id", "subject_type_id"],
:unique => true
인덱스 이름에 대한 데이터베이스 제한으로 인해 마이그레이션이 실패합니다. 오류 메시지는 다음과 같습니다.
테이블 'studies'의 인덱스 이름 'index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id'가 너무 깁니다. 한도는 64 자입니다
이것을 어떻게 처리 할 수 있습니까? 다른 색인 이름을 지정할 수 있습니까?
다음 과 같은 :name
옵션을 제공하십시오 add_index
.
add_index :studies,
["user_id", "university_id", "subject_name_id", "subject_type_id"],
:unique => true,
:name => 'my_index'
블록 에서 :index
옵션을 사용하는 경우 값 과 동일한 옵션 해시를 사용합니다.references
create_table
add_index
t.references :long_name, index: { name: :my_index }
create_table
블록 내의 열 정의에서 색인 이름을 변경할 수도 있습니다 (예 : 마이그레이션 생성기에서 가져옴).
create_table :studies do |t|
t.references :user, index: {:name => "index_my_shorter_name"}
end
PostgreSQL 에서 기본 제한은 63 자 입니다. 인덱스 이름은 고유해야하기 때문에 약간의 규칙이있는 것이 좋습니다. 나는 (더 복잡한 구조를 설명하기 위해 예를 조정했다) :
def change
add_index :studies, [:professor_id, :user_id], name: :idx_study_professor_user
end
일반적인 색인은 다음과 같습니다.
:index_studies_on_professor_id_and_user_id
논리는 다음과 같습니다.
index
된다idx
- 단수 테이블 이름
- 참여 단어가 없습니다
- 아니
_id
- 알파벳 순서
일반적으로 어떤 일을합니까?
당신은 또한 할 수 있습니다
t.index([:branch_id, :party_id], unique: true, name: 'by_branch_party')
Ruby on Rails API 에서와 같이 .
이전 답변과 비슷합니다. 일반 add_index 줄에 'name'키를 사용하십시오.
def change
add_index :studies, :user_id, name: 'my_index'
end
반응형
'Programing' 카테고리의 다른 글
NSOrderedSet 생성 접근 자에서 예외가 발생했습니다. (0) | 2020.02.28 |
---|---|
Gulp에 플래그를 전달하여 다른 방식으로 작업을 실행할 수 있습니까? (0) | 2020.02.28 |
int에서 자릿수를 얻는 방법? (0) | 2020.02.28 |
열거 형“상속” (0) | 2020.02.28 |
"컨트롤에 코드 블록이 포함되어 있으므로 Controls 컬렉션을 수정할 수 없습니다" (0) | 2020.02.28 |