9 puan yazan xguru 2024-11-20 | 2 yorum | WhatsApp'ta paylaş
  • Rust ile PostgreSQL eklentileri geliştirilebilir; mümkün olduğunca idiomatic ve güvenli olmaya odaklanır
  • cargo-pgrx ile tamamen yönetilen geliştirme ortamı sağlar
    • cargo pgrx new: yeni bir eklenti oluşturur
    • cargo pgrx init: PostgreSQL kurulumlarını kaydeder ve yönetir
    • cargo pgrx run: eklentiyi çalıştırır ve test eder
    • cargo pgrx test: birden fazla PostgreSQL sürümünde test eder
    • cargo 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 schema ile elle üretilebilir
    • extension_sql! ve extension_sql_file! makrolarıyla özel SQL eklenebilir
  • Önce güvenlik
    • Rust panic!, PostgreSQL ERROR'una çevrilir; böylece süreç yerine yalnızca transaction durdurulur
    • Rust bellek yönetimi modeli korunur - panic! ve elog(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: FromDatum olarak temsil edilir
    • NULL Datum güvenli şekilde Option::<T>::None olarak ifade edilir
  • 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ılabilir
      • pgrx::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::PgMemoryContexts ile Postgres'in MemoryContext sistemine güvenli erişim
    • Executor/planner/transaction/subtransaction hook'ları
    • Rust unsafe kullanarak pgrx::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ış: async bağ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

 
secret3056 2024-11-20

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.

 
xguru 2024-11-20

pglite-fusion - PostgreSQL tablolarına SQLite gömmek yazısında pgrx kullanıldığı söylenince ben de araştırdım.