Tarayıcıda Çalışan Gerçek Postgres: PGlite ile İstemci Tarafında SQL Devrimi
Tarayıcıda Çalışan Gerçek Postgres: PGlite ile İstemci Tarafında SQL Devrimi
Web geliştirme dünyası, WebAssembly (WASM) teknolojisinin olgunlaşmasıyla birlikte inanılmaz bir dönüşüm yaşıyor. Eskiden yalnızca sunucu tarafında (backend) çalışabileceğini düşündüğümüz ağır yükler, artık doğrudan kullanıcının tarayıcısında, yerel hızda çalışabiliyor.
Bu devrimin en son ve en heyecan verici meyvelerinden biri: PGlite.
ElectricSQL ekibi tarafından geliştirilen PGlite, tüm PostgreSQL veritabanı motorunu WebAssembly olarak paketleyerek doğrudan tarayıcıda (veya Node.js/Bun üzerinde) çalıştırmanıza olanak tanıyor. Üstelik herhangi bir Docker konteynerine, uzak sunucuya veya yerel kuruluma ihtiyaç duymadan!
Bu yazıda, PGlite’ın ne olduğunu, web uygulamalarında nasıl bir çığır açtığını ve neden bir sonraki projenizde onu kullanmak isteyebileceğinizi inceleyeceğiz.
PGlite Nedir?
PGlite, PostgreSQL’in (v15/v16) kaynak kodunun WebAssembly (WASM) biçiminde derlenmiş, son derece hafif ve hızlı bir sürümüdür. Sadece ~3 MB (gzipped) boyutunda olan bu kütüphane, tarayıcınızın belleğinde (in-memory) veya tarayıcının kalıcı depolama alanı olan IndexedDB üzerinde gerçek bir Postgres veritabanı çalıştırmanızı sağlar.
Geleneksel olarak tarayıcıda SQL çalıştırmak istediğimizde tek seçeneğimiz SQLite’ın WASM sürümleriydi. Ancak PGlite ile artık doğrudan gerçek Postgres motorunu istemci tarafına taşıyoruz.
PGlite’ı Bu Kadar Özel Yapan Ne? (Ana Avantajlar)
1. Çevrimdışı Öncelikli (Offline-First) Uygulamalar
Kullanıcılarınız tünelde, uçakta veya internet bağlantısının zayıf olduğu bir yerde mi? PGlite ile uygulamanızın tüm veritabanı işlemlerini yerelde (IndexedDB kullanarak) gerçekleştirebilirsiniz. İnternet bağlantısı geri geldiğinde ise yerel Postgres veritabanınız ile buluttaki ana veritabanınızı senkronize edebilirsiniz.
2. Test Süreçlerinde Işık Hızı
Backend testleri yazarken veritabanı ayağa kaldırmak (özellikle CI/CD süreçlerinde) her zaman zaman alır. PGlite, Node.js veya Bun üzerinde milisaniyeler içinde sıfırdan bir Postgres örneği başlatabilir. Docker kurma, port çakışmalarıyla uğraşma veya testler arası veritabanı temizleme derdi tarih oluyor!
3. Gerçek Postgres Özellikleri
SQLite harika bir veritabanıdır ancak Postgres'in sunduğu bazı gelişmiş özelliklerden yoksundur. PGlite ile şunlara doğrudan tarayıcıda sahip olursunuz: * Zengin veri tipleri (JSONB, UUID, vb.) * Gelişmiş metin arama (Full-Text Search) * Postgres uzantıları (Extensions) * Karmaşık JOIN'ler, Window fonksiyonları ve CTE'ler (Common Table Expressions)
4. Sıfır Bağımlılık ve Kolay Kurulum
PGlite çalıştırmak için bilgisayarınızda Postgres kurulu olmasına gerek yoktur. Sadece bir npm paketi yükleyerek projenize dahil edebilirsiniz.
PGlite Nasıl Çalışır? (Teknik Altyapı)
PGlite, Postgres'in tek kullanıcılı "single-user" modunu temel alır. Postgres normalde çok kullanıcılı, soket bağlantıları üzerinden haberleşen bir sunucu olarak çalışır. PGlite ise bu yapıyı basitleştirerek doğrudan JavaScript API'leri üzerinden sorgu alıp yanıt verecek şekilde optimize edilmiştir.
Verilerin kalıcılığı (persistence) için tarayıcı ortamında IndexedDB dosya sistemi sürücüsünü kullanır. Bu sayede tarayıcı sekmesi kapansa bile verileriniz güvenle saklanır.
Hızlı Başlangıç: Tarayıcıda İlk Sorgunuzu Çalıştırın
PGlite’ı projenize dahil etmek son derece basittir. İşte tarayıcıda veya Node.js ortamında çalıştırabileceğiniz temel bir örnek:
import { PGlite } from "@electric-sql/pglite";
// Tarayıcı belleğinde geçici bir veritabanı oluşturun
// Kalıcı olmasını isteseydik: new PGlite("idb://my-database") yazabilirdik.
const db = new PGlite();
// Tablo oluşturma ve veri ekleme
await db.query(`
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT,
email TEXT UNIQUE
);
`);
await db.query(`
INSERT INTO users (name, email)
VALUES ($1, $2);
`, ["Ahmet Yılmaz", "[email protected]"]);
// Sorgu çalıştırma
const result = await db.query("SELECT * FROM users;");
console.log(result.rows);
// Çıktı: [{ id: 1, name: "Ahmet Yılmaz", email: "[email protected]" }]
Gördüğünüz gibi, standart PostgreSQL sözdizimini (syntax) kullanarak doğrudan JavaScript içinden sorgularımızı çalıştırabiliyoruz.
PGlite vs. SQLite (WASM): Hangisini Seçmeli?
| Özellik | PGlite | SQLite (WASM) |
|---|---|---|
| Motor | Gerçek PostgreSQL | SQLite |
| Veri Tipleri | JSONB, UUID, Array, vb. | Sınırlı (TEXT, INTEGER, REAL, BLOB) |
| Gelişmiş Sorgular | Tam Postgres desteği | Kısmi destek |
| Boyut | ~3 MB (gzipped) | ~1 MB (gzipped) |
| Kullanım Amacı | Postgres ekosistemiyle uyum, gelişmiş özellikler | Çok hafif, basit yerel depolama |
Eğer uygulamanızın backend tarafında zaten Postgres kullanıyorsanız, istemci tarafında da PGlite kullanmak kod paylaşımını ve zihinsel yükü (cognitive load) inanılmaz derecede azaltır.
Kullanım Senaryoları: PGlite’ı Nerede Kullanabilirsiniz?
- İnteraktif Eğitim Platformları: Kullanıcılara hiçbir kurulum yaptırmadan, doğrudan tarayıcı üzerinden SQL öğretebileceğiniz platformlar kurabilirsiniz.
- Gelişmiş Dashboard ve Analiz Araçları: Büyük verileri tarayıcıya indirip, kullanıcının cihazında Postgres'in güçlü analitik fonksiyonlarıyla anında işleyebilirsiniz.
- Yerel Geliştirme ve Prototipleme: Yeni bir fikir üzerinde çalışırken veritabanı kurulumuyla vakit kaybetmeden doğrudan kodlamaya başlayabilirsiniz.
- Zengin Metin Editörleri ve Not Uygulamaları: Çevrimdışı çalışan, verileri yerel Postgres'te tutan ve internet bulduğunda sunucuya eşitleyen yeni nesil SaaS uygulamaları geliştirebilirsiniz.
Son Söz
PGlite, web teknolojilerinin sınırlarını zorlayan heyecan verici bir adım. Tarayıcıda "gerçek" bir Postgres çalıştırma fikri, yakın zamana kadar bir hayalden ibaretken, bugün üretim ortamına hazır bir kütüphane olarak karşımızda duruyor.
İstemci tarafında SQL devrimine katılmak ve uygulamalarınızı bir sonraki seviyeye taşımak istiyorsanız, PGlite GitHub sayfasını inceleyerek hemen denemeye başlayabilirsiniz.
Siz PGlite hakkında ne düşünüyorsunuz? Projelerinizde istemci tarafı veritabanlarına yer veriyor musunuz? Yorumlarda bizimle paylaşın!