Postgres를 Rust로 재작성, 이제 Postgres 회귀 테스트 100% 통과

10 hours ago 4
  • pgrust는 Postgres 18.3 호환을 목표로 하는 Rust 재작성 프로젝트이며, 46,000개 이상의 회귀 쿼리에서 Postgres의 예상 출력과 일치함
  • 기존 Postgres 18.3 데이터 디렉터리에서 부팅할 수 있는 디스크 호환성을 갖추고, 실제 Postgres 테스트를 동작 기준으로 삼음
  • 현재는 프로덕션 준비 상태가 아니며 성능 최적화도 아직 되어 있지 않고, 기존 Postgres 확장과 PL/Python·PL/Perl·PL/Tcl 같은 절차 언어 확장은 일반적으로 호환되지 않음
  • WebAssembly 데모와 Docker 이미지 malisper/pgrust:v0.1로 실행해볼 수 있으며, latest는 현재 같은 릴리스를 가리키지만 고정 실행 이미지는 v0.1임
  • 로드맵은 멀티스레드 Postgres 내부 구조, 내장 연결 풀링, JSON 중심 워크로드 개선, no-vacuum 저장소 실험, AI 생성 SQL을 위한 런타임 가드레일을 포함함

pgrust의 목표와 호환성

  • pgrust는 Postgres를 Rust로 재작성하는 프로젝트임
  • 목표 대상은 Postgres 18.3이며, 46,000개 이상의 회귀 쿼리에서 Postgres의 예상 출력과 일치함
  • 기존 Postgres 18.3 데이터 디렉터리에서 부팅할 수 있는 디스크 호환성을 제공함
  • 프로젝트의 목표는 내부에서 Postgres를 더 쉽게 바꿀 수 있게 만드는 것임
    • 동작은 Postgres 형태로 유지함
    • 실제 Postgres 테스트를 기준으로 사용함
    • Rust와 AI 보조 프로그래밍으로 더 깊은 서버 변경을 탐색함

현재 상태와 제한

  • pgrust는 아직 프로덕션 준비 상태가 아님
  • 아직 성능 최적화가 되어 있지 않음
  • 기존 Postgres 확장과 절차 언어 확장은 일반적으로 아직 호환되지 않음
    • PL/Python
    • PL/Perl
    • PL/Tcl
  • 일부 번들 contrib 모듈은 이미 포팅됐으며, 시간이 지나며 더 많은 호환성이 가능할 수 있음

실행 방법

  • WebAssembly 데모는 https://pgrust.com 에서 실행해볼 수 있음
  • Docker 실행은 malisper/pgrust:v0.1 이미지를 사용함
    • 이미지 내부의 psql 클라이언트를 사용함
    • malisper/pgrust:latest는 현재 같은 릴리스를 가리킴
    • 고정된 출시 이미지는 v0.1임
docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1 && until docker exec -e PGPASSWORD=secret pgrust psql -h 127.0.0.1 -U postgres -c '\q' >/dev/null 2>&1; do sleep 1; done && docker exec -it -e PGPASSWORD=secret pgrust psql -h 127.0.0.1 -U postgres; docker rm -f pgrust

소스 빌드와 실행

  • macOS에서는 icu4c, openssl@3, libpq가 필요함
brew install icu4c openssl@3 libpq export LIBRARY_PATH="$(brew --prefix openssl@3)/lib:${LIBRARY_PATH:-}" export PKG_CONFIG_PATH="$(brew --prefix openssl@3)/lib/pkgconfig:$(brew --prefix icu4c)/lib/pkgconfig:${PKG_CONFIG_PATH:-}" export PATH="$(brew --prefix libpq)/bin:$PATH"
  • Debian/Ubuntu에서는 빌드 도구와 ICU, OpenSSL, LDAP, PAM, Postgres 18 클라이언트를 설치함
sudo apt-get update sudo apt-get install -y build-essential pkg-config libicu-dev libssl-dev libldap2-dev libpam0g-dev postgresql-client-18
  • 빌드는 vendored Postgres 18.3 공유 디렉터리를 지정해 cargo build로 수행함
PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \ cargo build --release --locked --bin postgres
  • 데이터 디렉터리는 pgrust의 --initdb로 생성함
target/release/postgres --initdb \ -D /tmp/pgrust-data \ -L "$PWD/vendor/postgres-18.3/share" \ --no-locale \ --encoding UTF8 \ -U postgres
  • 실행 시 스택 관련 설정과 동기 I/O 설정을 함께 사용함
ulimit -s 65520 RUST_MIN_STACK=33554432 target/release/postgres \ -D /tmp/pgrust-data \ -F \ -c listen_addresses= \ -k /tmp \ -p 5432 \ -c io_method=sync \ -c max_stack_depth=60000

회귀 테스트와 검증 결과

  • Postgres 회귀 테스트는 scripts/run-regression으로 실행함
PGRUST_BIN="$PWD/target/release/postgres" \ scripts/run-regression
  • 테스트 러너는 pgrust의 자체 --initdb와 저장소에 포함된 Postgres 18.3 테스트 파일을 사용함
  • PATH에 Postgres 18 psql 클라이언트가 필요함
    • 다른 위치에 있으면 PGRUST_PSQL=/path/to/psql을 설정함
  • 검증된 출시 결과는 pgrust가 46,000개 이상의 회귀 쿼리에서 Postgres의 예상 출력과 일치했다는 것임

로드맵과 프로젝트 이력

  • 로드맵에는 다음 항목이 포함됨
    • 멀티스레드 Postgres 내부 구조

      • 내장 연결 풀링
      • JSON 중심 워크로드 지원 개선
      • 빠른 포크와 브랜칭 워크플로
      • no-vacuum 설계를 포함한 저장소 실험
      • 잘못된 쿼리와 AI 생성 SQL을 위한 런타임 가드레일
      • 갑작스러운 나쁜 실행 계획 전환 감소
      • 현재 저장소에는 회귀 테스트 이정표에 도달한 더 새로운 pgrust 구현이 들어 있음
      • 이전 공개 구현은 archive/pre-fabled-2026-06-23에 보관됨
      • 관련 배경 링크
      • Original pgrust launch
      • 67% regression update
      • Four Horsemen roadmap
      • 라이선스는 AGPL-3.0
Read Entire Article