- 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 확장과 절차 언어 확장은 일반적으로 아직 호환되지 않음
- 일부 번들 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의 예상 출력과 일치했다는 것임
로드맵과 프로젝트 이력