Postgres'te Geçmiş Veriyi Sorgulamak: SCD Type 4 Deseni
Postgres'te bir kaydın geçmişteki halini tek sorguda getirmek için history tablosu, trigger ve valid_from/valid_to deseni nasıl kurulur, adım adım anlatılıyor.
Uygulama geliştiricilerin sık karşılaştığı bir soru var: bir kaydın geçmişte belirli bir tarihte nasıl göründüğünü bulmak. Mevcut satır sürekli güncellendiği için bu bilgiyi doğrudan ana tablodan almak mümkün değil. Makale bu problemi çözmek için kullanılan yaklaşımları (event sourcing, yerinde versiyonlama/SCD Type 2, periyodik snapshot ve SCD Type 4) kısaca karşılaştırıyor ve özellikle mevcut, üretimde çalışan sistemlere kolayca eklenebilen SCD Type 4 desenine odaklanıyor.
Bu yöntemde ana tablonun yanına, aynı şemayı taşıyan ve valid_from/valid_to sütunlarıyla zenginleştirilmiş bir history tablosu oluşturuluyor. Bir row-level trigger, ana tablodaki her INSERT, UPDATE ve DELETE işlemini otomatik olarak history tablosuna yansıtıyor; böylece uygulama kodunun iki tabloya yazma sorumluluğu taşıması gerekmiyor. Silme işlemlerinde bir "tombstone" satırı oluşturularak kaydın ne zaman ortadan kalktığı da kayıt altına alınıyor.
Bu altyapı kurulduktan sonra, belirli bir zamandaki tablo durumunu almak DISTINCT ON kullanan tek bir SELECT sorgusuyla mümkün oluyor. Makale ayrıca kurulum öncesi mevcut kayıtlar için bir kerelik backfill gerekliliğini ve şema değişikliklerinde history tablosunun otomatik güncellenmediği, bu yüzden migration otomasyonuna ALTER TABLE adımının eklenmesi gerektiğini vurguluyor. Bu detaylar, üretim ortamında sessizce kırılabilecek noktaları önceden ele almak isteyen mühendisler için önemli.