
2026/07/09 15:18
Rust で再実装された PostgreSQL が、すべての PostgreSQL 回帰テストをクリアした
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
pgrust は、PostgreSQL 18.3 の AI を活用した支援下で、Rust ベースの再実装として大きなマイルストーンを代表しています。これは、世界でも最も重要なオープンソースデータベースの一つを近代化するとともに、既存データの互換性を保ちながら、46,000 件以上の回帰テストをパスさせることを目的として設計されています。現在はマルチスレッド機能や一部の拡張子の互換性の欠如(例:PL/Python、PL/Perl など)により実験段階にあり、生産環境での使用にはまだ至っていませんが、コアデータベースを Rust で再構築しても機能が失われないことを実証しており、AGPL-3.0 ライセンスの下で開発者にメンテナンスが容易なコードベースを提供しています。パフォーマンス低下を防ぐための将来のロードマップには、マルチスレッド化、コネクションプーリング、JSON サポートの改善、実行時ガードレールなどの内部アップグレードが含まれています。直近の利用を目的とする場合、Docker イメージ(
malisper/pgrust:latest または固定版 v0.1)を使用して WebAssembly デモを利用可能です。macOS および Debian/Ubuntu におけるソースビルドには、特定の依存関係と環境設定(スタック制限の増加を含む)が必要です。レポジトリには新実装とアーカイブされた以前のバージョンが格納されており、さらにのコラボレーションについてはメールアドレス、Discord、または GitHub のイシューを通じて maintainer にご連絡いただけます。本文
Rust による Postgres の再実装(pgrust)プロジェクト
PostgreSQL を Rust で再構築する「pgrust」プロジェクトの現状と活用方法です。
プロジェクト概要
- 互換性: PostgreSQL 18.3 と完全な互換性を確保しています。
- テスト結果: 46,000 件以上の回帰テストで、期待される出力と一致しています(検証済み)。
- ディスクレイアウト: データディレクトリの構造が互換性があり、既存の PostgreSQL 18.3 のデータディレクトリからそのまま起動可能です。
- 開発目標:
- Postgres の内部実装をより容易に変更・カスタマイズ可能にすること。
- PostgreSQL 特有の振る舞いを維持しながら、実際の PostgreSQL をテストケース(Oracle)として活用します。
- Rust と AI 支援によるプログラミング手法を用い、サーバーレベルの変更点を深く探究しています。
現状ステータス
以下の点にご注意ください:
- 利用制限: まだ生産環境での利用は推奨されていません。
- パフォーマンス: パフォーマンス最適化は完了しておりません。
- 機能制限:
- 既存の PostgreSQL エクステンション、PL/Python、PL/Perl、PL/Tcl など、手続き型言語拡張についての一般的な互換性は未確保です。
モジュールの一部は既に移植済みですが、今後さらに多くの互換性が追加される見込みがあります。contrib
ロードマップ
今後の開発予定事項です:
- スケーラビリティ: マルチスレッド化された内部実装の実装。
- コネクション: 内蔵接続プール機能の追加。
- データ処理: JSON を多用するワークロードへのサポート強化。
- パフォーマンス: フォークと分岐処理を高速化するワークフロー(Workflows)の構築。
- ストレージ:
設計など、ストレージに関する実験。no-vacuum - セキュリティ・品質:
- AI が生成した SQL や不良クエリに対する実行時ガードレールの導入。
- 突然の不良プラン切替(バッドプラン)の削減。
入手と利用方法
1. WebAssembly デモ
Web ブラウザ上での動作を試すには、以下の公式ページをご覧ください。
2. Docker で起動(推奨:v0.1
)
v0.1Docker イメージ内で
psql クライアントを使用します。安定した起動イメージとして v0.1 を固定で利用してください(latest は同じリリースですが、バージョン指定が推奨されます)。
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
接続確認のコマンド例:
psql -h /tmp -p 5432 -U postgres -d postgres \ -c "select version(), 1 + 1 as two"
3. ソースコードからのビルド
macOS の場合
必要なライブラリをインストールし、環境変数を設定します。
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 の場合
依存ライブラリを apt でインストールします。
sudo apt-get update sudo apt-get install -y \ build-essential pkg-config \ libicu-dev libssl-dev \ libldap2-dev libpam0g-dev postgresql-client-18
ビルドと起動手順
以下の順序で操作を行ってください。
① リリースビルド
PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \ cargo build --release --locked --bin postgres
② データディレクトリの作成と初期化 PostgreSQL 18.3 の共有ファイル(share)を指定して初期化します。
target/release/postgres --initdb \ -D /tmp/pgrust-data \ -L "$PWD/vendor/postgres-18.3/share" \ --no-locale \ --encoding UTF8 \ -U postgres
③ サーバー起動 スレッド制限などを適切に設定して起動します。
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
回帰テストの実行方法
PostgreSQL の公式回帰テストを pgrust に対して実行するには、以下のスクリプトを使用します。
- 前提条件:
に PostgreSQL 18 のPATH
クライアントが存在する必要があるか、psql
でパスを指定してください。PGRUST_PSQL - 使用方法:
PGRUST_BIN="$PWD/target/release/postgres" \ scripts/run-regression
このランナーは、pgrust 独自の
--initdb コマンドに加え、リポジトリ内のvendorフォルダにある Postgres 18.3 のテストファイルを使用します。
沿革と背景情報
- 現在の状態: リポジトリには、回帰テストのマイルストーン(46,000 件達成)をクリアした最新のインプレメンテーションが含まれています。
- 過去バージョン: 古い公開ビルトは
というパスでアーカイブされています。archive/pre-fabled-2026-06-23
関連リンク:
- オリジナル発表記事: Rust で PostgreSQL を AI 支援で再構築
- 67% 達成時レポート: 互換性向上と加速化レポート
- アウトレッジ原因となる「四騎士」ロードマップ: The Four Horsemen
連絡先とライセンス
フィードバック
不具合やセットアップの問題、機能改善のご提案は、GitHub Issue を作成してください。
お問い合わせ窓口
- メール: maintainers@pgrust.com
- Discord: 参加
- ニュース更新: 公式サイト
ライセンス
- 本プロジェクトは AGPL-3.0 ライセンスの下で提供されています。詳細は
ファイルをご確認ください。LICENSE