pgroll 여러 스키마 버전을 동시에 제공하여 PostgreSQL에 대한 안전하고 가역적 스키마 마이그레이션을 제공하는 오픈 소스 명령 줄 도구입니다. 데이터베이스 스키마가 업데이트되는 동안 클라이언트 응용 프로그램이 계속 작동하도록하기 위해 복잡한 마이그레이션 작업을 처리해야합니다. 여기에는 데이터베이스를 잠그지 않고 변경 사항을 적용하고 구형 및 새로운 스키마 버전이 모두 동시에 작동하는지 확인합니다 (변경 사항을 깨뜨릴 때에도). 이는 스키마 마이그레이션과 관련된 위험을 제거하고 클라이언트 응용 프로그램 롤아웃을 크게 단순화하여 즉각적인 롤백을 허용합니다.
pgroll 이 해결 한 문제에 대한 자세한 내용은 입문 블로그 게시물을 참조하십시오.
pgroll 실제 테이블 위에 뷰를 사용하여 가상 스키마를 생성하여 작동합니다. 이를 통해 기존 클라이언트에 영향을 미치지 않고 마이그레이션에 필요한 모든 변경 사항을 수행 할 수 있습니다.

pgroll 확장/계약 워크 플로를 따릅니다. 마이그레이션 시작시 물리적 스키마에서 모든 추가 변경 사항 (테이블 작성, 열 추가 등)을 수행하지 않고 수행합니다.
열에서 깨진 변경이 필요한 경우 실제 스키마에서 새 열을 생성하고 이전 열에서 백필합니다. 또한 트리거를 구성하여 전체 활성 마이그레이션 기간 동안 기존/새 열에 대한 모든 쓰기가 해당 상대방으로 전파되도록합니다. 그런 다음 새 열은 새 버전의 스키마에 노출됩니다.
시작 단계가 완료되면 새 스키마 버전이 준비되어 모든 뷰를 적절한 테이블 및 열에 매핑합니다. 클라이언트 응용 프로그램은 새 스키마 버전에 액세스 할 수 있지만 이전 버전은 여전히 사용할 수 있습니다. 이것은 새 버전의 클라이언트 응용 프로그램을 출시하기 시작하는 순간입니다.

더 이상 클라이언트 응용 프로그램이 이전 스키마 버전을 사용하지 않으면 마이그레이션을 완료 할 수 있습니다. 이렇게하면 이전 스키마가 제거되며 새로운 스키마는 유일하게 사용할 수 있습니다. 더 이상 필요한 테이블 및 열이 제거되지 않으며 (이 시점에서는 클라이언트가 사용하지 않습니다) 새 이름은 최종 이름으로 이름이 바뀝니다. 뷰가 여전히 적절한 테이블 및 열에 매핑 되므로이 단계에서 클라이언트 응용 프로그램은 여전히 작동합니다.
Binaries는 Linux, MacOS & Windows에서 사용할 수 있으며 릴리스를 확인하십시오.
소스에서 pgroll 설치하려면 다음 명령을 실행하십시오.
go install github.com/xataio/pgroll@latest참고 : Go 1.23 이상이 필요합니다.
Homebrew로 pgroll 설치하려면 다음 명령을 실행하십시오.
# macOS or Linux
brew tap xataio/pgroll
brew install pgroll 다음 단계에 따라 pgroll 사용하여 첫 번째 스키마 마이그레이션을 수행하십시오.
pgroll 데이터베이스에 일부 내부 상태를 저장해야합니다. 현재 스키마 버전을 추적하고 버전 기록을 저장하기 위해 테이블이 만들어졌습니다. 데이터베이스를 준비하려면 다음 명령을 실행하십시오.
pgroll init --postgres-url postgres://user:password@host:port/dbname 마이그레이션 파일을 만듭니다. 몇 가지 예제 폴더를 확인할 수 있습니다. 예를 들어이 마이그레이션 파일을 사용하여 새로운 customers 테이블을 만듭니다.
{
"name" : " initial_migration " ,
"operations" : [
{
"create_table" : {
"name" : " customers " ,
"columns" : [
{
"name" : " id " ,
"type" : " integer " ,
"pk" : true
},
{
"name" : " name " ,
"type" : " varchar(255) " ,
"unique" : true
},
{
"name" : " bio " ,
"type" : " text " ,
"nullable" : true
}
]
}
}
]
}그런 다음 다음 명령을 실행하여 마이그레이션을 시작하십시오.
pgroll --postgres-url postgres://user:password@host:port/dbname start initial_migration.json데이터베이스에 새 스키마 버전이 생성되고 마이그레이션 작업 (테이블 작성)을 적용합니다. 이 명령이 끝나면 스키마의 이전 버전 (고객 테이블 없음)과 새로운 스키마 (고객 테이블 포함)가 동시에 액세스 할 수 있습니다.
마이그레이션을 시작한 후 클라이언트 응용 프로그램은 새 스키마 버전을 사용하여 시작할 수 있습니다. 그렇게하려면 액세스하려면 구성해야합니다. 예를 들어, search_path 새 스키마 버전 이름 ( pgroll start output에서 제공)으로 설정하여 수행 할 수 있습니다.
SET search_path TO ' public_initial_migration ' ;이전 스키마 버전을 사용하여 더 이상 클라이언트 애플리케이션이 없으면 마이그레이션을 완료 할 수 있습니다. 이렇게하면 이전 스키마가 제거됩니다. 마이그레이션을 완료하려면 다음 명령을 실행하십시오.
pgroll --postgres-url postgres://user:password@host:port/dbname complete마이그레이션 중 언제라도 이전 버전으로 롤백 할 수 있습니다. 이렇게하면 새 스키마가 제거되고 마이그레이션이 시작되기 전과 같이 이전 스키마를 남겨 둡니다. 마이그레이션을 롤백하려면 다음 명령을 실행하십시오.
pgroll --postgres-url postgres://user:password@host:port/dbname rollback보다 고급 사용, 튜토리얼 및 세부 옵션은 문서의 안내서 및 참조를 참조하십시오.
시간이 지남에 따라 성능을 추적하기 위해 일부 성능 벤치 마크가 main 에 대한 각 커밋에서 실행됩니다. 각 벤치 마크는 Postgres 14.8, 15.3, 16.4, 17.0 및 "최신"에 대해 실행됩니다. 차트의 각 라인은 벤치 마크가 실행되는 행의 수를 나타내며 현재 10k, 100k 및 300k 행을 나타냅니다.
Backfill: Rows/S는 가치 placeholder 와 함께 텍스트 열을 배제합니다. 우리는 백 오프없이 배치 당 10k 행의 기본 배치 전략을 사용합니다.WriteAmplification/NoTrigger: pgroll 트리거없이 테이블에 데이터를 작성할 때 기준선/s.pgroll 트리거가 설정되었을 때 WriteAmplification/WithTrigger: rows/s 데이터를 테이블에 작성할 때.ReadSchema: 마이그레이션 중에 자주 실행되는 핵심 함수 인 read_schema 함수의 초당 실행 수를 확인합니다.여기에서 볼 수 있습니다.
우리는 지역 사회의 기여를 환영합니다! pgroll 에 기여하려면 다음을 따르십시오.
이 프로젝트를 위해, 우리는 개방적이고 환영하며 다양하며 포용 적이며 건강한 지역 사회에 기여하는 방식으로 행동하고 상호 작용할 것을 약속합니다.
이것은 영감으로 도움이되거나 pgroll 과 유사한 프로젝트 및 기사 목록입니다.
이 프로젝트는 Apache 라이센스 2.0에 따라 라이센스가 부여됩니다. 자세한 내용은 라이센스 파일을 참조하십시오.
궁금한 점이 있거나 문제가 발생하거나 도움이 필요한 경우이 저장소에서 문제를여십시오. 우리의 불화에 가입하면 커뮤니티가 기꺼이 도와 줄 것입니다.
Xata에 의해 ❤️로 만들어 졌습니까?