deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

safe-not-safe, Postgres migrasyonlarını Postgres'in kendi parser'ının WASM derlemesiyle kontrol ediyor

Hacker News'in ana sayfasına ulaşan yeni bir araç, PostgreSQL migrasyon dosyalarını WebAssembly'e derlenen libpg_query kullanarak statik olarak kontrol ediyor; npx CLI olarak veya tamamen tarayıcıda çalışabiliyor.

safe-not-safe, Postgres migrasyonlarını Postgres'in kendi parser'ının WASM derlemesiyle kontrol ediyor

Postgres'in gerçek grameri üzerine kurulu bir migrasyon denetleyicisi

safe-not-safe adlı bir proje 26 Eylül'de Hacker News'in ana sayfasına basit bir vaatle ulaştı: ona bir SQL migrasyon dosyası verin, o da size bu değişikliğin bir production veritabanında çalıştırılmasının güvenli olup olmadığını söylesin. Projenin safenotsafe.dev adresindeki sitesine göre araç iki biçimde geliyor — tarayıcı tabanlı bir denetleyici ve npx safe-not-safe check migration.sql ile çağrılan bir komut satırı arayüzü.

Gözle görülür teknik tercih parser'da. Hacker News kaydında alıntılanan aracın çıktısı, SQL'i libpg_query 17'nin WebAssembly'e derlenmiş haliyle ayrıştırdığını gösteriyor — yani SQL lehçesinin elle yazılmış bir yaklaşımı yerine doğrudan PostgreSQL 17'den alınan parser. Migrasyonları veritabanı motorunun kendi grameriyle ayrıştırmak, aracın deyimleri sunucunun göreceği şekilde, hafif parser'ların genellikle yanlış ele aldığı sözdizimi köşe durumları dahil görmesi anlamına geliyor.

Her şey istemci tarafında çalışıyor

Denetleyicinin web sürümü, sitenin kendi durum mesajlarına göre tamamen yerel: libpg_query WASM modülünü bir tarayıcı worker'ı içinde indirip derliyor, böylece yapıştırdığınız SQL bir backend'e gönderilmek yerine makinenizde ayrıştırılıyor. Şema dosyalarını hassas sayan ekipler için bu mimari, yapıştır-ve-kontrol tarzı web araçlarına yönelik itirazın ana kaynağını ortadan kaldırıyor.

Arayüz, statik bir denetleyiciden beklenen temel bilgileri raporluyor: deyim sayısı, girdinin karakter sayısı ve işaretlenen deyimlerin sayısı — boş durum "0 / 0 işaretlendi" gösteriyor — ve ayrıca denenebilecek örnek migrasyonlar içeriyor. CLI, yerel kontrollerde veya CI pipeline'larında kullanım için aynı akışı yansıtıyor.

Burada "güvenli" ne demek?

Mevcut bilginin sınırları hakkında net olmakta fayda var: bu hikayenin kaynak materyali temelde aracın arayüz metni ve denetleyicinin hangi belirli riskleri tespit ettiğini sıralamıyor. Bu nedenle kesin kural seti yayımlanan materyalde belgelenmemiş.

Hedeflediği problem sınıfı ise iyi biliniyor. Şema migrasyonları, aksi halde stabil çalışan PostgreSQL kurulumlarının devrilmesinin en yaygın yollarından biri. Agresif kilitler alan işlemler — örneğin CONCURRENTLY olmadan indeks oluşturmak, yapı süresince tabloda yazma işlemlerini blokluyor — tek bir kilidin arkasında bir uygulamayı dondurabiliyor. Tablonun tamamını yeniden yazan komutlar, örneğin büyük ve yoğun kullanılan bir tabloda bir kolonun tipini değiştirmek, bu kilidi dakikalarca veya saatlerce tutabiliyor. Kısıtlama veya varsayılan değer eklemek bile yük altında dağıtım yapan ekipleri şaşırtabilecek maliyetler taşıyabilir. Bu alandaki statik denetleyiciler — Ruby'nin strong_migrations'ı ve diğer framework ekosistemlerindeki benzer linter'lar — tam da bu kalıpları dağıtım sırasında değil inceleme aşamasında yakalamak için var.

safe-not-safe'nin tüm bu durumları kapsayıp kapsamadığı ve yanlış pozitifleri kaçırılan risklere karşı nasıl dengelediği, ana sayfa materyalının ortaya koyduğu bir şey değil.

Neden önemli

Migrasyon güvenliği çoğu ekibin hâlâ gayri resmi yollarla çözdüğü bir inceleme zamanı sorunu; nöbetçi kıdemli mühendisin hangi ALTER TABLE varyantlarının tabloyu yeniden yazdığını hatırlamasını umarak. Gerçek PostgreSQL gramerine karşı çalışan, npx üzerinden sürtünmesiz dağıtılan ve SQL'i tarayıcıdaki bir worker'da yerel olarak işleyen bir denetleyici, bu kontrolü benimseme maliyetini ciddi biçimde düşürüyor — çalıştırılacak sunucu yok, yüklenecek şema yok ve DDL'nizi görecek üçüncü taraf bir servise bağımlılık yok.

libpg_query'un WASM içinde kullanılması aynı zamanda sessiz ama önemli bir kalıp. PostgreSQL'in parser'ı sunucunun neyi kabul edeceğinin yetkili tanımı ve onu WebAssembly'e derlemek, tarayıcı araçlarının bu tanımı taklit etmek yerine birebir paylaşabilmesi anlamına geliyor. safe-not-safe'nin kural seti kapsamlı çıkarsa, "bu migrasyon güvenli mi?" sorusunun her pull request'te yerel, çevrimdışı bir araçla yanıtlandığı, kilıt zaman aşımından sonraki bir postmortem ile değil, bir geleceğe işaret ediyor.

Şimdilik araç ana sayfaya yeni gelmiş bir yüz: mimaride umut verici, belgelenmiş ayrıntıda cömert olmayan ve Postgres migrasyonu yapan herhangi bir ekibin kendi değişiklik geçmişine karşı dakikalar içinde değerlendirebilecek kadar denemesi kolay.

  • #postgresql
  • #migrations
  • #developer-tools
  • #wasm
  • #static-analysis

İlgili yazılar