- Katılım
- 17 Eki 2024
- Mesajlar
- 3
- Tepkime puanı
- 4
- Puanları
- 1
Geçmişi Kabullenmek: Postgres’ta Zaman Yolculuğuna Eşlik Eden Temporal Tablolar
“Veri sadece bugündür, geçmiş ise savunulması gereken kutsal bir varlık.” – Unnamed Database Enthusiast
> **Neden Bu Konu Öyle Önemli?**
> - **Denetim**: Her bir değişiklik kaydedilerek kim, ne zaman ve nasıl bir değişiklik yaptığını rahatlıkla izleyebilirsiniz.
> - **Veri Bilimi**: Pandemi gibi senaryolarda tarihe bakmak, trendleri doğru modellemek için kritik.
> - **Geri Getirme**: Hatalı bir UPDATE sonrasında “gelmişti” diyerek geri dönmek bu kadar zor değil.
## 1. Temporal Tablo Nedir?
PostgreSQL 15'ten itibaren sunulan **Temporal Table (Zamanlı Tablo)** özelliği, bir tablonun her değişikliğinin otomatik olarak kaydedildiği, tarih‑saati sahip bir sürüm sistemidir. Tek tek VIEW veya audit tablosu kurmazsanız bile, verileriniz geçmişte hangi sürümde olduğunu otomatik takip eder.
```sql
-- Temporal tablo oluşturma örneği
CREATE TABLE person
(
id BIGSERIAL PRIMARY KEY,
name TEXT,
age INT,
-- Postgres zaman dilimi destekli PST için
ts_created TIMESTAMPTZ GENERATED ALWAYS AS (now()) STORED,
ts_updated TIMESTAMPTZ GENERATED ALWAYS AS (now()) STORED
) WITH (SYSTEM_VERSIONING = ON);
```
Yukarıdaki başlık, `SYSTEM_VERSIONING` ile ateşlenip otomatik satır‑tarama oluşturur.
## 2. Nasıl Kullanılır?
### a. Geçmiş Üzerine Sorgulama
```sql
SELECT * FROM person FOR SYSTEM_TIME AS OF '2023-12-25 10:00:00' WHERE id = 1;
```
Bu sorgu, verilen anın `id = 1` olan kişinin bütün alanlarını çeker.
### b. Değişiklik geçmişi
```sql
SELECT * FROM person FOR SYSTEM_TIME ALL WHERE id = 1 ORDER BY system_start ASC;
```
## 3. En İyi Uygulamalar
1. **Güncelleme Politikası**: Veri yoğunluklu tablolar için snapshot‐based “temporal” yerine **log‑only** arşivleme de değerlendirilebilir.
2. **Arşiv ve Temizleme**: Zaman sarayı eski sürümleri otomatik olarak silme yeteneğine sahiptir;
`CONSTRAINTS` ile `DROP ON LEASE` veya manuel `VACUUM` izin verilir.
3. **Güvenlik**: `SYSTEM_VERSIONING` sütunları IP‑aka katılarak **Row‑Level Security** ile sınırlandırılabilir.
4. **Index**: `system_start` ve `system_end` üzerine `BRIN` indeksleri sorgu hızını katlayacak şekilde optimize edilir.
## 4. Soru: Geçmişi Ne Ölçüde Kullanmalı?
Birçok şirket sadece son 30 günü saklamayı tercih eder. Ancak, **dönemsel denetim raporları**, **API kaza analizi** veya **örnek veri yeniden üretimi** için yıllara dayanan kayıtlar değerli olabilir. Zamanlama gereksinimlerinize göre taşıyacak yapılandırma başlamak için idealdir.
> **Cevabınızı Paylaşın!**
>
> Siz zaman‑temelli veritabanı deneyimi yaşadınız mı? Hangisi sizin için daha fazla değer yarattı: denetim mi, veri bilimi mi, yoksa hata geri dönüşümü mü?
---
[*] Kaynak: PostgreSQL Documentation 15, Temporal Table API
[//]: # (Tüm kısaltmalar açıkta.)







