PostgreSQL
Veritabanı

PostgreSQL

Açık kaynaklı, güçlü ve ACID uyumlu ilişkisel veritabanı sistemi.

PostgreSQL Nedir?

PostgreSQL; ACID uyumlu işlem modeli, gelişmiş query planner’ı, zengin veri tipleri (JSON/JSONB, Array, HStore, Range), MVCC eşzamanlılık, genişletilebilir fonksiyon/uzantı mimarisi (ör. PostGIS, pg_stat_statements) ve güçlü replikasyon seçenekleriyle kurumsal ölçekte kullanılan bir ilişkisel veritabanıdır.

Bilgi: Resmî dokümantasyona buradan ulaşabilirsiniz.

Avantajları

NUVIA Yaklaşımı

NUVIA olarak PostgreSQL’i; yüksek erişilebilirlik (HA) mimarileri, otomatik yedekleme stratejileri, gözlemlenebilirlik (monitoring & tracing) ve sıkı güvenlik politikalarıyla işletiriz. Çevik teslimat süreçlerinde, altyapıyı kodla (IaC) yönetir; CI/CD hatlarıyla şema değişikliklerini güvenli biçimde sunarız.

Mimari
  • Primary/Standby replikasyon (asenkron/yarı-senkron)
  • Patroni/pgPool-II ile otomatik failover
  • Read replica ile okuma ölçekleme
Güvenlik
  • Network segmentation, TLS, pg_hba.conf sıkılaştırma
  • RBAC, SECURITY DEFINER gözden geçirme
  • At-rest & in-transit şifreleme
Gözlemlenebilirlik
  • Metrics: pg_stat_statements, pgBadger, Exporter → Prometheus/Grafana
  • Log rotasyonu ve yavaş sorgu günlükleri
  • Uyarı eşikleri & SLO takibi

Kullanım Senaryolarımız

OLTP Kurumsal Uygulamalar

Bankacılık, e-ticaret, ERP ve faturalama sistemleri için güçlü bütünlük kısıtları ve yüksek güvenilirlik.

  • Yüksek eşzamanlılık için MVCC ve doğru indexleme
  • Partitioning ile sıcak/soğuk veri ayrımı
Analitik & Karma İş Yükleri

JSONB + ilişkisel model hibrit yapıları; materialized view’lerle hızlı içgörü.

  • BRIN indeksleriyle geniş zaman-serisi tabloları
  • FDW ile veri gölü/harici kaynaklara erişim
Coğrafi Uygulamalar

PostGIS ile gelişmiş mekânsal sorgular, mesafe/çakışma analizleri, index destekli hızlı aramalar.

Olay Günlükleri & Telemetri

Zaman-serisi verilerde yazma hızı ve sıkıştırma için TimescaleDB veya native partitioning.

Hızlı Başlangıç

# Docker ile başlatma (örnek)
docker run --name pg -e POSTGRES_PASSWORD=secret -p 5432:5432 -d postgres:16

# psql bağlantısı
psql -h localhost -U postgres

# Örnek DB ve kullanıcı
CREATE DATABASE appdb;
CREATE USER app WITH ENCRYPTED PASSWORD 'app-pass';
GRANT ALL PRIVILEGES ON DATABASE appdb TO app;
-- Basit tablo ve index örneği
CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL,
  status TEXT NOT NULL,
  payload JSONB,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- JSONB alanına GIN index\CREATE INDEX idx_orders_payload_gin ON orders USING GIN (payload);

-- Sık sorgulanan alanlara B-Tree index
CREATE INDEX idx_orders_user_status ON orders (user_id, status);

Yönetim & İşletim Notları

Yedekleme / Geri Dönüş
# Mantıksal yedek
pg_dump -Fc -d appdb > appdb.dump
pg_restore -d appdb_restored appdb.dump

# Fiziksel yedek (PITR için WAL arşivleme önerilir)
# postgresql.conf: archive_mode=on, archive_command, wal_level=replica
Performans İpuçları
  • Yavaş sorgu günlüğü: log_min_duration_statement
  • Otomatik istatistik: autovacuum parametrelerini izleyin
  • Bağlantı havuzu: pgbouncer
  • Konfigürasyon başlangıcı: shared_buffers, effective_cache_size, work_mem, maintenance_work_mem

Sık Sorulanlar

Evet. JSON/JSONB tipleri, GIN index ve operatörler sayesinde belge tabanlı sorgular yapılabilir. Ancak şema disiplini ve ilişkisel tasarım çoğu senaryoda daha sürdürülebilirdir.

En az 1 yazılabilir primary ve 1+ read replica; otomatik failover için Patroni/pgPool-II; yedek için PITR + dış yedekleme.

Yönetilen servisler (RDS, Cloud SQL, Aiven vb.) pazara çıkış hızını artırır. Kendi altyapınız ise maliyet/denetim açısından esneklik sağlar. Karar, iş yükü ve ekip yetkinliğinize göre verilir.