다중 데이터베이스 마이그레이션
GitLab 애플리케이션의 다중 데이터베이스 분해 구조에서 데이터베이스 마이그레이션을 올바르게 작성하는 방법을 설명합니다.
이 문서는 다중 데이터베이스를 사용하는 분해된 GitLab 애플리케이션 을 위해 데이터베이스 마이그레이션을 올바르게 작성하는 방법을 설명합니다. 자세한 내용은 다중 데이터베이스 를 참조하세요. 다중 데이터베이스 설계(Geo 데이터베이스 제외)는 분해된 모든 데이터베이스가 동일한 구조 (예: 스키마)를 가지지만, 데이터는 각 데이터베이스마다 다르다 고 가정합니다. 즉, 일부 테이블은 각 데이터베이스에 데이터를 포함하지 않을 수 있습니다. 작업 유형 # 사용하는 구문에 따라 마이그레이션을 다음과 같이 분류할 수 있습니다: 구조 변경( DDL - Data Definition Language ) (예: ALTER TABLE ) 데이터 변경( DML - Data Manipulation Language ) (예: UPDATE ) 기타 쿼리 실행 (예: SELECT ) - 마이그레이션 목적상 DML 로 취급됨 Gitlab::Database::Migration[2.0] 사용 시 마이그레이션은 항상 단일 목적이어야 합니다 . 애플리케이션은 db/structure.sql 에 기술된 구조가 모든 분해된 데이터베이스에서 완전히 동일하도록 요구하기 때문에, 마이그레이션에서 DDL 과 DML 변경을 혼용할 수 없습니다. Data Definition Language (DDL) # DDL 마이그레이션은 다음을 수행하는 모든 마이그레이션입니다: 테이블 생성 또는 삭제 (예: create_table ) 인덱스 추가 또는 삭제 (예: add_index , add_concurrent_index ) 외래 키 추가 또는 삭제 (예: add_foreign_key , add_concurrent_foreign_key ) 기본값 유무와 관계없이 칼럼 추가 또는 삭제 (예: add_column ) 트리거 함수 생성 또는 삭제 (예: create_trigger_function ) 테이블에 트리거 연결 또는 분리 (예: track_record_deletions , untrack_record_deletions ) 비동기 인덱스 준비 또는 취소 (예: prepare_async_index , unprepare_async_index_by_name ) 테이블 비우기 (예: truncate_tables! 헬퍼 메서드 사용) 따라서 DDL 마이그레이션은 다음을 할 수 없습니다 : SQL 구문이나 ActiveRecord 모델을 통해 어떤 형태로든 데이터를 읽거나 수정 칼럼 값 업데이트 (예: update_column_in_batches ) 백그라운드 마이그레이션 예약 (예: queue_batched_background_migration ) 피처 플래그 상태 읽기 - 피처 플래그는 main: ( features 및 feature_gates 테이블)에 저장됨 애플리케이션 설정 읽기 (설정은 main: 에 저장됨) GitLab 코드베이스의 대부분의 마이그레이션은 DDL 유형이므로, 이것이 기본 작동 모드이며 마이그레이션 파일에 추가 변경이 필요하지 않습니다. 예시: 모든 데이터베이스에서 DDL 수행 # 구조