PostgreSQL ileri düzey: performans, çoğaltma ve güvenlik
PostgreSQL’de zengin veri türlerini, hızlı sorguları, yedek ve çoğaltmayı, satır düzeyinde güvenliği öğrenirsin.
Seviye 301 · 27 ders · 24 pratik lab
Dersler
Veri türleri ve sorgular
- Gelişmiş veri türleri: dizi, enum, aralık, UUID: Bir sütunda liste, sabit seçenek, tarih aralığı ve benzersiz kimlik saklamayı doğru türlerle yapabileceksin.
- JSONB: sorgulama, indeksleme ve güncelleme: JSONB sütunundan değer çekmeyi, GIN indeksiyle hızlandırmayı ve yalnızca bir alanı güncellemeyi öğrenirsin.
- Tarih ve saat işlemleri: zaman dilimi ve aralıklar: Zaman dilimli zaman damgalarını doğru saklamayı, aralık hesabı yapmayı ve günlük kayıtlarını saate göre gruplamayı öğrenirsin.
- PostgreSQL pencere fonksiyonları: Satırları gruplamadan sıralama, önceki satırla karşılaştırma ve birikimli toplam hesaplamayı öğrenirsin.
- CTE, özyinelemeli sorgular ve LATERAL: Karmaşık sorguyu WITH ile adımlara bölmeyi, ağaç yapılı veriyi gezmeyi ve satır başına alt sorgu çalıştırmayı öğrenirsin.
- PostgreSQL tam metin araması: tsvector ve GIN indeksiyle metinde kök bulmalı, alaka sıralı arama yapabileceksin.
- PostGIS ile konum verisi: PostGIS eklentisini kurup noktaları saklamayı ve “şuraya 5 km içindekiler” gibi konum sorgularını çalıştırmayı öğrenirsin.
- Kısa görev: JSONB ve pencere fonksiyonlarıyla etkinlik raporu
Performans ve bakım
- İndeks türleri: kısmi, ifade ve GIN/GiST: Her sorguya uygun indeksi seçmeyi; yalnızca bir kısım satırı ya da hesaplanmış değeri indekslemeyi öğrenirsin.
- PostgreSQL tablo bölümlendirme: Büyük bir günlük tablosunu tarihe göre bölüp eski bölümü anında ayırmayı öğrenirsin.
- VACUUM, ANALYZE ve veritabanı bakımı: Silinen satırların bıraktığı şişmeyi VACUUM ile temizlemeyi ve sorgu planlayıcısının istatistiklerini ANALYZE ile yenilemeyi öğrenirsin.
- PgBouncer ile bağlantı havuzu: Çok sayıda istemcinin az sayıda gerçek bağlantıyı paylaşmasını PgBouncer ile kurabileceksin.
- Kısa görev: şişmiş ve yavaş bir tabloyu düzelt
Veritabanı içinde mantık
- Materialized view ve görünüm yönetimi: Ağır bir sorgunun sonucunu saklayan görünüm kurmayı ve ne zaman yenileneceğini yönetmeyi öğrenirsin.
- PL/pgSQL fonksiyonları ve hata yönetimi: PL/pgSQL ile fonksiyon yazmayı, hata yakalamayı ve anlamlı hata iletisi döndürmeyi öğrenirsin.
- Tetikleyiciler ve olay tetikleyicileri: Satır değişince çalışan tetikleyiciyle değişiklik izi tutmayı, tablo oluşturma gibi yapı değişikliklerini olay tetikleyicisiyle izlemeyi öğrenirsin.
- İşlem yalıtımı, kilitler ve kilitlenme: Eşzamanlı işlemlerin birbirini nasıl etkilediğini, satır kilitlerini ve kilitlenmenin nasıl çözüldüğünü öğrenirsin.
- Kısa görev: sipariş akışını PL/pgSQL ile kur
Süreklilik: WAL, yedek ve çoğaltma
- WAL arşivleme ve belirli ana geri dönüş: Yazma öncesi günlüğü (WAL) arşivleyip veritabanını geçmişteki istediğin ana geri getirebileceksin.
- Akış çoğaltması (streaming replication): Birincil sunucudan yedek sunucuya canlı kopyalama kurup gecikmeyi izlemeyi öğrenirsin.
- Kısa görev: bekleme sunucusu kur ve bir anı geri getir
Güvenlik
- Rol hiyerarşisi ve varsayılan yetkiler: Rolleri gruplayıp devralmayı kurmayı, yeni tablolara otomatik izin verilmesini ve PUBLIC şemasındaki yetkileri daraltmayı öğrenirsin.
- pg_hba.conf ve SCRAM kimlik doğrulama: Kimin hangi adresten, hangi yöntemle bağlanabileceğini pg_hba.conf’ta tanımlayıp SCRAM-SHA-256 kullanmayı öğrenirsin.
- Satır düzeyinde güvenlik (RLS): Her kullanıcının tabloda yalnızca kendi satırlarını görmesini politikalarla sağlayabileceksin.
- TLS bağlantısı ve pgcrypto ile sütun şifreleme: Bağlantıyı TLS ile korumayı, hassas sütunu pgcrypto ile şifrelemeyi ve parolayı tuzlu özetle saklamayı öğrenirsin.
- pgaudit ile denetim günlüğü: pgaudit eklentisiyle hangi rolün hangi nesneye ne yaptığını ayrıntılı kayda geçirebileceksin.
- Bitirme görevi: çok kiracılı bir uygulamanın PostgreSQL’ini hızlandır ve koru
Pratik lablar
- Dizi sütununda etiket ara: Ürün etiketlerini dizi olarak tut ve belirli iki etiketi birlikte taşıyan ürünleri bul.
- Saat dilimi kaynaklı yanlış raporu düzelt: Gece yarısı civarındaki siparişleri yanlış güne yazan raporu timestamptz ve AT TIME ZONE ile düzelt.
- Aralık türüyle çifte rezervasyonu engelle: Toplantı odası rezervasyonlarını tstzrange ve dışlama kısıtıyla çakışmaz hale getir.
- JSONB içinde koşullu ara: Olay kayıtlarındaki JSONB alanından belirli bir cihaz türüne ait olayları süz.
- JSONB aramasını GIN ile hızlandır: İçerme sorgusu yavaş olan JSONB sütununa doğru GIN operatör sınıfını seçip indeks ekle.
- JSONB belgesini yerinde güncelle: Kullanıcı ayarlarında iç içe bir alanı jsonb_set ile değiştir ve eksik anahtarlı satırları da doğru ele al.
- Türkçe metinde tam metin ara: Haber başlıklarında to_tsvector ve to_tsquery ile ekli kelime biçimlerini de bulan arama yap.
- Sonuçları ilgiye göre sırala: Arama sonuçlarını ts_rank ile sıralayıp başlığa gövdeden fazla ağırlık ver.
- Arama sütununu saklı oluşturulmuş sütunla tut: Her sorguda tsvector hesaplayan yavaş aramayı oluşturulmuş sütun ve GIN indeksiyle hızlandır.
- En yakın beş şubeyi bul: Lale Market şubelerinin konumlarından bir kullanıcıya en yakın beş şubeyi mesafeyle listele.
- Bölge içindeki teslimatları say: Mavikuş Kargo'nun teslimat noktalarından çizilen bir çokgen bölgenin içine düşenleri say.
- Mekânsal sorguyu indeksle hızlandır: Yüz bin noktada yavaşlayan yarıçap sorgusuna GiST indeksi ekle ve coğrafya ile geometri farkını göster.
- Kısmi indeksle yalnız aktifleri indeksle: Satırların yüzde birini oluşturan bekleyen siparişler için kısmi indeks kur ve boyutu karşılaştır.
- İfade indeksiyle büyük harf duyarsız ara: lower(email) ile yapılan girişi hızlandıran ifade indeksini ekle ve planı doğrula.
- Mevcut tabloyu bölümlü yapıya taşı: Büyüyen ölçüm tablosunu aylık bölümlere taşı, eski veriyi ekle ve bölüm budamasını kanıtla.
- Ağır raporu somut görünüme al: Dakikalar süren pano sorgusunu somut görünüme çevirip yenileme komutunu zamanla.
- Okumayı engellemeden görünümü yenile: Benzersiz indeks ekleyerek somut görünümü CONCURRENTLY yenile ve okumaların sürdüğünü göster.
- Bağlantı havuzunu doğru kipte çalıştır: İşlem kipindeki havuzda oturum ayarlarının kaybolduğu hatayı bul ve uygulama ile havuz ayarını uyumlu hale getir.
- Kiracıya göre satır süz: Çok kiracılı fatura tablosunda her kiracının yalnızca kendi satırlarını görmesini RLS ilkesiyle sağla.
- Yazma ilkesini okumadan ayır: Kullanıcıların başka kiracı adına satır ekleyememesi için WITH CHECK içeren ayrı ilke yaz.
- RLS'yi atlatan yolu bul ve kapat: Tablo sahibi ve görünüm üzerinden RLS'nin atlandığını göster ve FORCE ile güvenlik görünümüyle kapat.
- Hassas sütunu pgcrypto ile şifrele: Kimlik numarası sütununu pgcrypto ile şifreleyip yalnızca anahtarla okunabildiğini göster.
- Kimin neyi okuduğunu denetle: Denetim eklentisini maaş tablosundaki okumaları kaydedecek şekilde ayarla ve günlükten sorgulayanı bul.
- Parolaları SCRAM'e taşı: Eski özet biçimindeki parolaları bul, SCRAM'e geçir ve eski yöntemi pg_hba.conf'ta kapat.
Kurs hakkında
PostgreSQL’de zengin veri türlerini, hızlı sorguları, yedek ve çoğaltmayı, satır düzeyinde güvenliği öğrenirsin.
Ne öğreneceksin
- Veri türleri ve sorgular
- Performans ve bakım
- Veritabanı içinde mantık
- Süreklilik: WAL, yedek ve çoğaltma
- Güvenlik
Ön koşullar
Aynı yolun 101 ve 201 düzeyindeki konularına hâkim olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde ve ona bağlı özel bir lab ağında geçer. Kurulum gerekmez.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 301 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.