pgrx - Framework untuk mengembangkan ekstensi PostgreSQL dengan Rust
(github.com/pgcentralfoundation)- Dapat mengembangkan ekstensi PostgreSQL dengan Rust, dengan upaya agar sebisa mungkin idiomatis & aman
- Mendukung lingkungan pengembangan yang dikelola sepenuhnya dengan
cargo-pgrxcargo pgrx new: membuat ekstensi barucargo pgrx init: mendaftarkan dan mengelola instalasi PostgreSQLcargo pgrx run: menjalankan dan menguji ekstensicargo pgrx test: menguji di beberapa versi PostgreSQLcargo pgrx package: membuat paket instalasi ekstensi
- Mendukung banyak versi PostgreSQL
- Mendukung PostgreSQL 12 hingga 17
- API per versi dapat digunakan secara selektif melalui Rust feature gating
- Pengujian integrasi dapat dilakukan untuk semua versi
- Pembuatan skema otomatis
- Ekstensi dapat diimplementasikan hanya dengan Rust
- Banyak tipe Rust dipetakan secara otomatis untuk PostgreSQL
- Skema SQL dapat dibuat otomatis atau dibuat manual dengan
cargo pgrx schema - SQL kustom dapat disertakan melalui makro
extension_sql!danextension_sql_file!
- Mengutamakan keamanan
panic!di Rust diterjemahkan menjadi PostgreSQLERROR, sehingga hanya transaksi yang dibatalkan, bukan prosesnya- Model manajemen memori Rust tetap dipertahankan, termasuk saat
panic!danelog(ERROR) - Makro
#[pg_guard]mendukung integrasi yang stabil antara Rust dan PostgreSQL - Postgres
Datumdirepresentasikan sebagaiOption<T> where T: FromDatum NULLDatum direpresentasikan secara aman sebagaiOption::<T>::None
- Dukungan UDF kelas satu
- Dengan anotasi
#[pg_extern], fungsi Rust (fungsi yang ditentukan pengguna di Postgres) dapat diekspos ke PostgreSQL #[pg_trigger]untuk membuat fungsi trigger
- Dengan anotasi
- Mendukung tipe yang ditentukan pengguna
- Dengan
#[derive(PostgresType)], struct Rust dapat digunakan sebagai tipe PostgreSQL:- Di memori/disk dikodekan sebagai CBOR, dan dalam bentuk yang dapat dibaca manusia direpresentasikan sebagai JSON
- Dapat mendefinisikan format representasi kustom untuk memori/disk/JSON
- Dengan
#[derive(PostgresEnum)], Rust Enum dapat digunakan sebagai enum PostgreSQL - Mendukung tipe komposit melalui makro
pgrx::composite_type!("Sample")
- Dengan
- Server Programming Interface (SPI)
- Dapat mengakses SPI dengan aman
- Dapat mengembalikan Datum yang dimiliki dalam konteks SPI secara transparan
- Fitur lanjutan
- Akses aman ke sistem MemoryContext milik Postgres melalui
pgrx::PgMemoryContexts - Hook executor/planner/transaction/subtransaction
- Dapat mengakses fitur internal PostgreSQL melalui
pgrx::pg_sysdengan memanfaatkanunsafedi Rust
- Akses aman ke sistem MemoryContext milik Postgres melalui
- Batasan dan masalah yang diketahui
- Tidak mendukung multithreading: Postgres pada dasarnya berbasis single-thread, dan jika thread mengakses fungsi Postgres dapat menyebabkan crash
- Dukungan asinkron belum matang: penelitian tentang interaksi dengan Postgres dalam konteks
asyncmasih kurang - Dukungan Windows masih kurang: saat ini belum berfungsi sempurna di Windows
- Wajib encoding UTF-8: jika database Postgres tidak kompatibel dengan UTF-8, error dapat terjadi
2 komentar
Sepertinya pgrx adalah nama baru dari pgx.
Proyek serupa untuk sqlite adalah sqlite-loadable-rs.
pglite-fusion - Menanamkan SQLite ke dalam tabel PostgreSQL Karena tertulis menggunakan pgrx di sana, saya jadi mencarinya.