PostgreSQL 3D logosu bembeyaz arka planda sade premium kompozisyon

PostgreSQL eğitimi, veritabanını "MySQL alternatifi" basitliğinden çıkartıp gerçek gücüyle kullanmak için tasarlandı. PostgreSQL'in açık kaynak ekosistemindeki yeri commercial DB'lerle karşılaştırılır; ACID garantileri ve MVCC mekaniği sezgisel olarak anlatılır.

Program sonunda katılımcı, B-tree, Hash, GIN, GiST ve BRIN index türlerini doğru senaryoda seçer; JSON ve JSONB ile schema-less alan ve indexing yapar; CTE, window function ve lateral join gibi gelişmiş sorgular yazar. Partitioning, parallel query ve replication (streaming, logical) eğitimin operasyonel tarafıdır. Eğitim, PostgreSQL belgeleri baz alınarak kurgulanır.

Katılımcı Profili

Bu eğitim, PostgreSQL'i "MySQL alternatifi" basitliğinden çıkartıp gerçek gücüyle kullanmak isteyen rollere yöneliktir:

  • Backend Geliştiriciler: PostgreSQL ile veri katmanı yazan mühendisler
  • Veritabanı Yöneticileri: PostgreSQL replica ve cluster yöneten DBA'ler
  • Veri Mühendisleri: PostgreSQL'i analitik amaçla kullanan roller
  • Migration Ekipleri: MySQL veya Oracle'dan PostgreSQL'e geçen ekipler
  • Solution Architect'ler: Açık kaynak DB tercihi yapan roller

Ön Gereklilikler

Bu eğitime katılım için aşağıdaki ön bilgiler önerilir:

  • Temel SQL bilgisi (SELECT, JOIN, WHERE, GROUP BY)
  • İlişkisel veri modeli ve normalization kavramlarına aşinalık
  • Komut satırı (psql) veya bir GUI aracı (pgAdmin, DBeaver) deneyimi
  • Linux dosya sistemi ve servis kavramlarına temel aşinalık
  • Veri yönetiminde ACID ve transaction kavramlarına giriş düzeyi bilgi

Süresi ve Tarihi

Süre: 3 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.

Kazanımlar

Eğitim sonunda katılımcı, PostgreSQL'i "MySQL alternatifi" basitliğinden çıkartıp gerçek gücüyle kullanır:

  • PostgreSQL'in açık kaynak ekosistemini commercial DB ile karşılaştırır
  • ACID garantilerini ve MVCC mekaniğini sezgisel anlatır
  • B-tree, Hash, GIN, GiST ve BRIN index türlerini doğru senaryoda seçer
  • JSON ve JSONB ile schema-less alan ve indexing yapar
  • CTE, window function ve lateral join gibi gelişmiş sorgular yazar
  • Partitioning ve parallel query ile performans kazandırır
  • Streaming, logical ve pglogical replication arasında seçim yapar

PostgreSQL Eğitimi Konuları

1. PostgreSQL Mimarisi

  • Postmaster ve backend process
  • Shared buffer, WAL, work_mem
  • Cluster, database, schema hiyerarşisi
  • pgdata ve dosya yapısı

2. Veri Tipleri - Temel

  • Numeric: integer, bigint, numeric, decimal
  • Character: char, varchar, text farkları
  • Date/time: timestamp, timestamptz, interval
  • Boolean ve UUID
  • SERIAL vs IDENTITY column

3. Gelişmiş Veri Tipleri

  • JSON ve JSONB
  • Array ve array operatörleri
  • Range type (int4range, tsrange)
  • hstore key-value
  • PostGIS ile geometric type

4. DDL - Table, Schema, Tablespace

  • CREATE/ALTER/DROP TABLE
  • Schema ile namespace yönetimi
  • Tablespace ile fiziksel yerleşim
  • Temporary ve unlogged table

5. Constraint - PK, FK, UNIQUE, CHECK

  • Primary key ve composite key
  • Foreign key ve referential action
  • UNIQUE constraint ve partial
  • CHECK constraint ile validasyon
  • EXCLUDE constraint ve range

6. DML ve RETURNING Clause

  • INSERT, UPDATE, DELETE
  • RETURNING ile etkilenen satırı alma
  • UPSERT (INSERT ... ON CONFLICT)
  • WITH clause ile data-modifying CTE

7. JOIN Türleri ve Lateral Join

  • INNER, LEFT, RIGHT, FULL, CROSS
  • LATERAL JOIN ile correlated subquery
  • USING ve NATURAL JOIN
  • Self join örnekleri

8. Window Functions

  • ROW_NUMBER, RANK, DENSE_RANK
  • LAG, LEAD, FIRST_VALUE, LAST_VALUE
  • PARTITION BY ve frame clause
  • Running total ve moving average

9. CTE ve Recursive CTE

  • WITH clause ile common table expression
  • Recursive CTE ile hiyerarşi
  • MATERIALIZED hint
  • Tree traversal ve graph query

10. Index Türleri

  • B-tree: varsayılan
  • GIN: array, JSONB, full-text
  • GiST: geometric, full-text
  • BRIN: büyük sequential data
  • Hash ve partial index
  • Expression ve covering index

11. Materialized View

  • Materialized view ile pre-aggregation
  • REFRESH stratejileri
  • Concurrent refresh
  • Incremental refresh yaklaşımları

12. View, Function, Procedure

  • View ve updatable view
  • Function ve immutable/stable/volatile
  • Stored procedure ve transaction control
  • PL/pgSQL temel söz dizimi
  • LANGUAGE: SQL, plpgsql, plpython

13. Trigger - BEFORE/AFTER ve Trigger Functions

  • BEFORE, AFTER, INSTEAD OF trigger
  • Row vs statement level
  • Event trigger ve DDL audit
  • NEW ve OLD record

14. Transaction ve MVCC

  • BEGIN, COMMIT, ROLLBACK
  • SAVEPOINT ile nested transaction
  • MVCC (Multi-Version Concurrency Control)
  • Row visibility ve transaction ID

15. Isolation Levels

  • Read Committed (default)
  • Repeatable Read
  • Serializable
  • Phantom read, non-repeatable read
  • SELECT FOR UPDATE, FOR SHARE

16. Partitioning

  • Range, list, hash partitioning
  • Partition pruning
  • pg_partman ile otomasyon
  • Sub-partitioning

17. Replication - Streaming ve Logical

  • Streaming replication ile read replica
  • Logical replication ve publication
  • Hot standby ve failover
  • Patroni ile HA cluster
  • PgBouncer connection pooler

18. VACUUM, ANALYZE, Performance Tuning

  • VACUUM ve VACUUM FULL
  • Autovacuum tuning
  • ANALYZE ile istatistik güncelleme
  • EXPLAIN ANALYZE ile query plan
  • pg_stat_statements ve slow query
  • postgresql.conf ana parametreler

POSTGRESQL EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları


B-tree, GIN, GiST ve BRIN index türleri arasında karar?

B-tree default; sıralama, range query, equality için. GIN array, JSONB, full-text search için ideal — gereken yerde DRAM/IO kazancı dramatik. GiST geometrik, full-text alternatif. BRIN çok büyük tablo ve sıralı veri (time-series) için — küçük index, makul performans. EXPLAIN ile gerçek seçimi gözlemek şart.

MVCC nasıl çalışır ve VACUUM neden gerekli?

MVCC her satırın versiyonunu (xmin, xmax) tutar; read'ler yazıcıları bloklamaz. Update yeni satır yazar, eski satır 'dead tuple' olur. VACUUM dead tuple'ları temizler, ANALYZE istatistik günceller. Autovacuum default aktif ama yüksek-volume tabloda manuel scheduler eklemek pratik.

JSONB ile JSON arasındaki fark nedir?

JSON ham metin olarak saklar — format korunur ama her sorgu parse maliyeti. JSONB binary, parse edilmiş, key sıralanmış — query hızlı, GIN index'lenebilir. Modern PostgreSQL projelerinde JSONB standart. JSON path operator (->, ->>, @>) zengin sorgu imkânı sunar.

Streaming replication ile logical replication arasında karar?

Streaming replication WAL akışı; tüm cluster'ı replikasyon — HA için kullanılır, geri uyum yok. Logical replication publication-subscription model ile tablo seviyesinde, sürüm bağımsız. Sürüm yükseltme veya selective replikasyon için logical doğru; full HA için streaming.

CTE (WITH clause) performansa nasıl etki eder?

PostgreSQL 12+ CTE'yi inline edebilir (optimizer fence default'tan kalktı) — okunabilir kod yazılır, performans kaybı az. Eski sürümlerde CTE materialized barrier — optimize edilmemiş plan riski. Recursive CTE hiyerarşik veri için tek pratik yol; tree traversal yaygın kullanım.

Partitioning ne zaman değer üretir?

Çok büyük tablo (10M+ satır) ve partition key'e göre sıkça filtreleme varsa pruning ile sorgu hızlanır. Tarihsel veri için range partitioning, multi-tenant için list partitioning yaygın. Eski partition'ı detach veya drop ile arşivleme kolaydır. Erken partitioning gereksiz operasyonel yük.