모든 리더와 라이터를 매핑
대표적인 정제 데이터로 격리된 스키마에서 작업하십시오. 현재 및 다음 애플리케이션 버전, 마이그레이션 프레임워크에 대한 지식, 검토된 백업 전략, 장기 트랜잭션에 대한 가시성이 필요합니다. 워커, 예약 작업, 보고서 및 이전 애플리케이션 인스턴스를 포함하십시오. API는 빠르게 업데이트될 수 있지만 장기 실행 워커는 여전히 이전 컬럼에 쓸 수 있습니다.
예시 보고 서비스는 내보내기 라벨을 다음에 저장합니다: label 그리고 다음을 원합니다: display_name. 이는 설계 예시이며 보편적으로 실행 가능한 SQL이 아닙니다. 마이그레이션 구문이나 잠금 설정을 선택하기 전에 정확한 PostgreSQL 버전과 프레임워크를 확인하십시오.
기존 표현을 폐기하지 않고 확장
먼저 새로운 nullable 필드를 도입하십시오. 하나의 트랜잭션에서 두 값을 모두 쓰고 데이터가 불완전한 동안 필요한 폴백으로 읽는 호환성 릴리스를 배포하십시오. 백필 중에 고객이 레코드를 편집할 때 어떤 일이 발생하는지 정의하십시오. 재시도가 두 번째 논리적 내보내기를 생성해서는 안 됩니다.
PostgreSQL ALTER TABLE 작업은 잠금을 획득하며, 수준은 하위 명령에 따라 달라집니다. 작은 변경이 장기 트랜잭션 뒤에서 대기하다가 다른 작업을 방해할 수 있습니다. 특정 작업을 검토하고 리허설 중 대기를 관찰하십시오. 추가적이라는 것이 잠금이 없다는 것을 의미하지는 않습니다.
기술 참조: PostgreSQL ALTER TABLE · PostgreSQL 명시적 잠금.
호환성 경계를 가시화
| 스키마 및 라이터 | 리더 동작 | 복구 결정 |
|---|---|---|
| 라벨만 존재 | 이전 코드 지원됨 | 먼저 새 필드 추가 |
| 두 필드 모두; old-only 라이터 유지 | 라벨을 권위 있는 것으로 읽기 | 아직 리더를 전환하지 않음 |
| 모든 라이터 이중 쓰기; 검증된 백필 | 새 필드는 권위 있는 값이 될 수 있습니다 | 호환되는 이중 쓰기 코드로만 롤백 |
| 이전 필드 제거됨 | 어떤 코드도 레이블을 참조하면 안 됩니다 | 이전 아티팩트는 호환되지 않습니다 |
누락된 값에 대한 폴백은 null이 아니지만 오래된 새 값을 감지할 수 없습니다. 리더를 전환하기 전에 이전 전용 작성자를 정리하고 일관성을 검증하세요. 리더 컷오버 후 이전 전용 코드로 롤백하면 다시 분기가 생길 수 있습니다. 대신 호환성 릴리스를 검토된 복구 아티팩트로 유지하세요.
제한적이고 재시작 가능한 작업으로 백필
최신 고객 편집을 덮어쓰지 않고 복사해야 할 행을 찾으세요. 안정적인 순서, 동시성 안전 업데이트 조건, 워크로드에 맞게 선택한 배치를 사용하세요. 실패 시 알려진 경계에서 재개할 수 있도록 진행 상황을 유지하세요. 쓰기 볼륨, 잠금 대기, 요청 지연 시간 및 복제가 있는 경우 복제를 모니터링하세요.
모든 애플리케이션에 안전한 배치 크기는 없습니다. 리허설에서 작은 배치를 일반 트래픽과 비교한 다음 일시 중지 또는 중지 규칙을 선택하세요. 배치가 실패하면 재시도하기 전에 커밋된 내용을 검사하세요. 무제한 재시도 루프는 복구 가능한 불일치를 지속적인 데이터베이스 부하로 바꿀 수 있습니다.
채워진 행이 아니라 의미를 확인
누락된 값, 대표 라벨, 새 레코드 및 기존 내보내기에 대한 업데이트를 검증하세요. null이 아닌 행을 세면 올바르게 보일 수 있지만 값이 잘못된 소스에서 복사되었을 수 있습니다. 부분적으로 채워진 데이터에 대해 호환성 아티팩트를 테스트하고 배포 전에 시작된 워커를 실행하세요.
스키마 버전, 마이그레이션 리비전, 완료 기준 및 호환되지 않는 조합을 기록하세요. 둘 중 하나를 제거하기 전에 폴백 사용 및 일관성을 검사하세요. 검사가 실패하면 백필 또는 승격을 중지하고 증거를 보존하며 호환되는 아티팩트 또는 검토된 전방 복구를 선택하세요. 애플리케이션 롤백이 커밋된 데이터를 재구성한다고 주장하지 마세요.
별도 검토 릴리스에서 기존 필드 폐기
백필 및 관찰 기간이 기준을 충족한 후 이전 읽기 및 쓰기를 제거하세요. 대화형 경로뿐만 아니라 빈도가 낮은 작업도 확인하세요. 이전 필드 삭제는 자체 복구 결정이 있는 이후 변경에 속하므로 릴리스 문제로 인해 코드 복구와 데이터 재구성을 결합하도록 강제되지 않습니다.
폐기 후 잘못된 데이터가 나타나면 추가 손상을 중지하고 복구 계획 또는 승인된 복구를 사용하세요. 도구가 롤백 버튼을 노출한다는 이유만으로 파괴적인 다운 마이그레이션을 적용하지 마세요. 매트릭스를 첨부하세요 릴리스 기록 그리고 리허설하세요 데이터 복구 프로덕션 변경 전에. 유용한 결과는 제로 다운타임 보장이 아니라 명시적인 호환성 경계입니다.
공식 참조
이 문서에 대한 설명서가 검토되었습니다. 예시는 계획 연습이며 PrivacyNodes 서버에서 테스트된 명령이 아닙니다. 설치된 버전의 설명서를 확인하세요.