pgrx - Rust ile PostgreSQL eklentileri geliştirmek için bir framework
(github.com/pgcentralfoundation)- Rust ile PostgreSQL eklentileri geliştirilebilir; mümkün olduğunca idiomatic ve güvenli olmaya odaklanır
cargo-pgrxile tamamen yönetilen geliştirme ortamı sağlarcargo pgrx new: yeni bir eklenti oluştururcargo pgrx init: PostgreSQL kurulumlarını kaydeder ve yönetircargo pgrx run: eklentiyi çalıştırır ve test edercargo pgrx test: birden fazla PostgreSQL sürümünde test edercargo pgrx package: eklenti kurulum paketi oluşturur
- Çoklu PostgreSQL sürümü desteği
- PostgreSQL 12 ile 17 arasını destekler
- Rust feature gating ile sürüme özgü API'ler seçmeli olarak kullanılabilir
- Tüm sürümler için entegrasyon testi yapılabilir
- Otomatik şema üretimi
- Eklenti yalnızca Rust ile uygulanabilir
- Birçok Rust tipi PostgreSQL için otomatik olarak eşlenir
- SQL şeması otomatik üretilebilir veya
cargo pgrx schemaile elle üretilebilir extension_sql!veextension_sql_file!makrolarıyla özel SQL eklenebilir
- Önce güvenlik
- Rust
panic!, PostgreSQLERROR'una çevrilir; böylece süreç yerine yalnızca transaction durdurulur - Rust bellek yönetimi modeli korunur -
panic!veelog(ERROR)durumlarında da #[pg_guard]makrosu ile Rust ve PostgreSQL arasında güvenli entegrasyon sağlanır- Postgres
Datum,Option<T> where T: FromDatumolarak temsil edilir NULLDatum güvenli şekildeOption::<T>::Noneolarak ifade edilir
- Rust
- Birinci sınıf UDF desteği
#[pg_extern]anotasyonuyla Rust fonksiyonları (Postgres kullanıcı tanımlı fonksiyonları) PostgreSQL'e açılabilir#[pg_trigger]ile trigger fonksiyonları oluşturulabilir
- Kullanıcı tanımlı tip desteği
#[derive(PostgresType)]ile Rust struct'ları PostgreSQL tipi olarak kullanılabilir:- Bellekte/diskte CBOR ile kodlanır, insan tarafından okunabilir biçimde ise JSON olarak gösterilir
- Özel bellek/disk/JSON gösterim biçimleri tanımlanabilir
#[derive(PostgresEnum)]ile Rust enum'ları PostgreSQL enum'u olarak kullanılabilirpgrx::composite_type!("Sample")makrosu üzerinden composite type desteği sunulur
- Sunucu Programlama Arayüzü (SPI)
- SPI'ye güvenli şekilde erişilebilir
- SPI bağlamında sahipliği alınmış Datum'lar şeffaf biçimde döndürülebilir
- Gelişmiş özellikler
pgrx::PgMemoryContextsile Postgres'in MemoryContext sistemine güvenli erişim- Executor/planner/transaction/subtransaction hook'ları
- Rust
unsafekullanarakpgrx::pg_sysüzerinden PostgreSQL iç işlevlerine erişim
- Sınırlamalar ve bilinen sorunlar
- Multithreading desteklenmez: Postgres temelde tek iş parçacıklı yapıdadır; thread'ler Postgres fonksiyonlarına erişirse çökme yaşanabilir
- Asenkron destek tamamlanmamış:
asyncbağlamında Postgres ile etkileşim konusunda yeterli araştırma yoktur - Windows desteği yetersiz: Şu anda Windows'ta tam olarak çalışmaz
- UTF-8 kodlaması zorunlu: Postgres veritabanı UTF-8 uyumlu değilse hata oluşabilir
2 yorum
Görünüşe göre pgrx, adını pgx olarak değiştirmiş.
Benzer bir proje olarak sqlite için sqlite-loadable-rs var.
pglite-fusion - PostgreSQL tablolarına SQLite gömmek yazısında pgrx kullanıldığı söylenince ben de araştırdım.