Geri Dön
Safe / Not Safe, Postgres mıgrasyonlarını dağıtımdan önce denetliyor
SiTech AI Team2 წთ. საკითხავი

Safe / Not Safe, Postgres mıgrasyonlarını dağıtımdan önce denetliyor

Açık kaynaklı yerel araç, Postgres mıgrasyonunu tarayıcıda libpg_query ile ayrıştırıyor ve değişiklik üretime ulaşmadan önce SAFE, NOT SAFE veya NEEDS CONTEXT kararını veriyor; arka uç yok, SQL kaydı yok.

Dağıtımdan önce karar

Safe / Not Safe (safenotsafe.dev), PostgreSQL mıgrasyonları için tamamen tarayıcıda çalışan bir denetleyici. Geliştirici mıgrasyonu editöre yapıştırıyor, SQL bir Web Worker içinde WebAssembly'ye derlenmiş libpg_query ayrıştırıcısıyla çözümleniyor ve araç üç karardan birini veriyor: SAFE, NOT SAFE veya NEEDS CONTEXT. Projenin README'sine göre amaç bilinçli olarak dar: şema değişikliklerinin bilinen tuzaklarını üretime ulaşmadan yakalamak.

Karardan önce uygulama iki bağlam sorusu soruyor: hedef tabloda kaç satır var (50 binden az, 50 bin ile 5 milyon arası, 5 milyondan fazla) ve dağıtım aracı DDL'yi bir işlem içine alıyor mu. Üçüncü kararın nedeni bu: bazı komutlar yalnızca belirli bir tablo boyutunda ya da işlem bloğunun içinde riskli.

Kural kataloğu neleri arıyor

Kurallar TypeScript ile yazılmış ve depo on iki denetim sıralıyor: sıradan CREATE INDEX ile CREATE INDEX CONCURRENTLY farkı, işlem sarmalayıcısı içinde CONCURRENTLY, default değerli eklenen sütunlar, ALTER COLUMN TYPE kaynaklı tablo yeniden yazımı, NOT VALID olmadan eklenen yabancı anahtarlar, VALIDATE CONSTRAINT, SET NOT NULL, DROP COLUMN, yeniden adlandırmalar, doğrudan unique constraint oluşturma, TRUNCATE ve VACUUM FULL ile CLUSTER gibi yeniden yazma komutları.

Her birinin gerçek bir maliyeti var. Sıradan CREATE INDEX, oluşturma boyunca yazmayı bloke eder; CREATE INDEX CONCURRENTLY bundan kaçınır ama bir işlem bloğu içinde çalışamaz. Sabit default ile eklenen sütun modern PostgreSQL'de ucuzdur, ancak expression veya volatile default yine tüm tabloyu yeniden yazar. ALTER COLUMN TYPE genellikle tabloyu baştan yazar ve bu sırada güçlü bir kilit tutar. NOT VALID olmadan eklenen yabancı anahtar tüm mevcut satırları hemen doğrular; NOT VALID olarak eklenip VALIDATE CONSTRAINT sonradan çalıştırılırsa iş iki adıma bölünür. Yeniden adlandırma ve DROP COLUMN ise başka bir nedenle risklidir: kademeli dağıtım sırasında hâlâ çalışan eski uygulama sürümleri eski adı sorgular.

Yerel çalışma ve CLI

Tüm analiz tarayıcı sekmesinde yapılıyor. Tamponlar diske yazılmıyor, hiçbir şey sunucuya gönderilmiyor; projenin gizlilik notuna göre yapıştırılan SQL'i alan bir API rotası, veritabanı bağlantısı ve telemetri yok. Aynı motor bir CLI olarak da paketlenmiş: npx safe-not-safe check migration.sql komutu ayrıştırma sonucunu terminale yazdırıyor.

Yığın, Vite ile derlenen bir React uygulama kabuğu; ayrıştırıcı önceden başlatılan bir Web Worker içinde çalışıyor, böylece WASM derlemesi sırasında arayüz takılmıyor. Üretim hedefi Cloudflare Workers ve yapılandırmasında bilinçli olarak D1, R2 veya KV bağlantısı yok. Kaynak kod GitHub'da, viggy28/safe-not-safe deposunda.

SSiTech

SiTech — AI destekli web geliştirme

Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.