pgrx: RustでPostgres拡張を書く
要約
- pgrxは、PostgreSQL拡張をRustで記述するためのフレームワーク。慣用的な安全性、自動スキーマ生成、cargoベースの開発ツールチェーンを備え、Postgres 13〜18をサポートする。
ポイント
-
cargo-pgrxが開発サイクル全体を担う: スキャフォールド、複数PGバージョンの初期化、psqlでのインタラクティブ実行、バージョンをまたいだユニットテスト、配布用パッケージング。 -
Rustのpanicは
elog(ERROR)経由でPostgresのERRORに変換され、プロセスではなくトランザクションをアボートする。メモリ管理はRustのdropセマンティクスに従い、elog(ERROR)をまたいでも機能する。 -
#[pg_extern]、#[pg_trigger]、#[derive(PostgresType)]、#[derive(PostgresEnum)]により、Rustの関数と型を最小限のボイラープレートでPostgresに公開できる。 - SQLスキーマはRustの型から自動生成される。Postgres↔Rustの型マッピングはrange、JSON/JSONB、UUID、配列、数値型をカバーする。
- スレッド利用は明示的に非対応: Postgresの内部関数をスレッドから呼び出してはならず、Postgresとの非同期インタラクションは未検証領域とされている。
Hacker Newsのコメント
- 現時点で目立ったHN上の議論はなし。
英語版: Pgrx: Build Postgres Extensions with Rust · Original source