2P by neo 2023-10-05 | favorite | 댓글 1개
  • 이 기사에서는 PostgreSQL을 위한 안전하고 되돌릴 수 있는 스키마 마이그레이션을 위해 설계된 새로운 명령 줄 도구인 pgroll을 소개합니다.
  • 데이터베이스 스키마 마이그레이션은 시스템 업데이트에 필수적이지만, 잠재적인 파괴적 변화, 복잡한 다단계 프로세스, 예기치 않은 데이터베이스 잠금, 어려운 롤백 등의 도전과 함께 옵니다.
  • 많은 개발자들이 복잡한 마이그레이션을 피하고 추가적인 변경만을 만들어, 데이터베이스 스키마에서 기술적 부채를 증가시킵니다.
  • pgroll은 마이그레이션이 위험 없고, 정의하고 실행하기 쉽고, 일반적인 배포 워크플로의 일부이며, 쉽게 되돌릴 수 있고, 특별한 오케스트레이션이 필요하지 않음을 보장함으로써 Postgres 스키마 진화를 더 나은 경험으로 만들기 위해 노력합니다.
  • 이 도구는 사용자가 고수준 JSON 형식을 사용하여 스키마 마이그레이션을 정의하고 실행하는 것을 돕습니다.
  • pgroll의 주요 기능에는 다음이 포함됩니다:
    • 고수준 JSON 형식으로 정의된 마이그레이션.
    • 전체 마이그레이션 과정 동안 접근 가능한 스키마의 두 가지 버전 (이전 및 다음) 유지.
    • 즉시 롤백.
    • 제로 다운타임.
  • pgroll은 데이터베이스 스키마를 진화시키기 위해 확장 및 축소 패턴을 사용하며, 이전 및 새 버전의 스키마를 Postgres 물리 스키마 위의 "가상" 스키마로 사용 가능하게 합니다.
  • 이 도구는 DDL 문을 실행하는 동안 Postgres 테이블에 잠금을 보장하고 데이터 액세스 차단을 방지합니다.
  • pgroll은 필요할 때 자동 백필을 수행하는 것도 처리합니다.
  • 이 기사에서는 pgroll을 사용하여 열을 NOT NULL로 설정하는 방법에 대한 예를 제공합니다.
  • pgroll의 첫 번째 버전이 이제 사용 가능하며 Xata 팀은 사용자 피드백을 기대하고 있습니다.
  • Xata는 기본적으로 생산 준비가 되어 있으며 일시 중지하거나 쿨다운하지 않는 업계 최고의 무료 플랜을 제공합니다.
Hacker News 의견
  • 기사는 'Pgroll', Postgres를 위한 제로 다운타임, 되돌릴 수 있는 스키마 마이그레이션 도구에 대해 논의합니다.
  • 한 사용자는 Pgroll이 기본 테이블에 매핑하는 다른 스키마에서 다른 뷰를 생성함으로써 작동하며, 앱은 새 스키마를 참조하는 새 연결 문자열로 다시 배포된다고 설명합니다.
  • 또 다른 사용자는 되돌릴 수 있는 마이그레이션의 가치에 의문을 제기하며, 마이그레이션이 활성화되면 롤백이 문제를 일으킬 수 있다고 제안합니다.
  • 비슷한 도구인 'Reshape'의 창시자는 Xata 팀의 출시를 축하하며, 이 개념이 더욱 발전하는 것을 기대하고 있습니다.
  • 한 사용자는 코드에 대해 의문을 제기하며, 특히 새 스키마의 뷰가 이제 이름이 변경된 기본 열을 참조하도록 업데이트되는 단계를 지적하고, 실패한 쿼리가 없도록 트랜잭션이 필요하다고 제안합니다.
  • 비슷한 도구인 'QuantumDB'의 저자는 저자들에게 출시를 축하하며, 이 도구를 잘 생각해 낸 것으로 칭찬합니다.
  • 한 사용자는 마이그레이션 도중에 오래된 스키마와 새로운 스키마를 모두 유지하고, 들어오는 요청을 실시간으로 변환하는 가능성을 제안합니다.
  • 또 다른 사용자는 앱 내에서의 마이그레이션 접근법을 공유하며, 롤백이 코드에 연결되어 있기 때문에 더 안전하다고 제안합니다.
  • 한 사용자는 기사에 링크된 블로그 포스트를 찾을 수 없다고 지적합니다.
  • 한 사용자는 다운타임 없이 마이그레이션을 수행하는 유일한 방법은 앱을 DB 변경 전에 앞으로 호환되게 만들고, DB 변경을 취소하기 전에 뒤로 호환되게 만드는 것이라고 제안합니다.
  • 또 다른 사용자는 도구와 관련된 잠재적인 문제를 제기하며, 테이블 이름을 잠금 없이 변경할 수 없는 능력의 부재, 복사 테이블 + 트리거 접근법을 지원하기 위한 디스크 공간과 I/O 용량의 필요성, 그리고 이 접근법이 상당한 크기의 데이터베이스에서 작동하지 않을 가능성을 들었습니다.