PostgreSQL Kurulum ve Performans Optimizasyonu Rehberi
z
zafer ak
Yazar
30 December 2025
3 dakika okuma
497 görüntülenme
PostgreSQL veritabanı kurulumu, temel yapılandırma, kullanıcı yönetimi, yedekleme stratejileri ve performans optimizasyonu.
PostgreSQL, açık kaynak kodlu, güçlü ve güvenilir bir ilişkisel veritabanı yönetim sistemidir. Bu rehberde kurulum ve optimizasyonu öğreneceksiniz.
PostgreSQL vs MySQL
| Özellik | PostgreSQL | MySQL |
|---|---|---|
| ACID Uyumluluğu | Tam | InnoDB ile |
| JSON Desteği | Gelişmiş (JSONB) | Temel |
| Full-text Search | Native | Sınırlı |
| Extensibility | Çok yüksek | Orta |
Kurulum
# Ubuntu/Debian
sudo apt update
sudo apt install postgresql postgresql-contrib
# CentOS/RHEL
sudo dnf install postgresql-server postgresql-contrib
sudo postgresql-setup --initdb
# Servisi başlat
sudo systemctl enable postgresql
sudo systemctl start postgresql
İlk Yapılandırma
# postgres kullanıcısına geç
sudo -u postgres psql
# Şifre belirleme
ALTER USER postgres PASSWORD 'guclu_sifre';
# Yeni veritabanı oluşturma
CREATE DATABASE myapp;
# Yeni kullanıcı oluşturma
CREATE USER myapp_user WITH ENCRYPTED PASSWORD 'sifre123';
# Yetki verme
GRANT ALL PRIVILEGES ON DATABASE myapp TO myapp_user;
# Çıkış
\q
pg_hba.conf Yapılandırması
Bağlantı izinleri /etc/postgresql/XX/main/pg_hba.conf dosyasında:
# TYPE DATABASE USER ADDRESS METHOD
# Local connections
local all postgres peer
local all all md5
# IPv4 local connections
host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24 md5
# IPv6 local connections
host all all ::1/128 md5
postgresql.conf Optimizasyonu
# /etc/postgresql/XX/main/postgresql.conf
# Bağlantı Ayarları
listen_addresses = '*'
port = 5432
max_connections = 200
# Bellek Ayarları (16GB RAM için)
shared_buffers = 4GB # RAM'in %25'i
effective_cache_size = 12GB # RAM'in %75'i
work_mem = 64MB # Sorgu başına
maintenance_work_mem = 512MB # Bakım işlemleri
# Write-Ahead Log
wal_buffers = 64MB
checkpoint_completion_target = 0.9
max_wal_size = 2GB
# Query Planner
random_page_cost = 1.1 # SSD için
effective_io_concurrency = 200 # SSD için
# Logging
log_destination = 'stderr'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_duration_statement = 1000 # 1 saniyeden uzun sorgular
Temel psql Komutları
# Veritabanına bağlan
psql -h localhost -U myapp_user -d myapp
# Veritabanları listele
\l
# Tablolar listele
\dt
# Tablo yapısı
\d table_name
# Sorgu çalıştır
SELECT * FROM users LIMIT 10;
# Sorgu planı
EXPLAIN ANALYZE SELECT * FROM users WHERE id = 1;
# Çıkış
\q
Index Optimizasyonu
-- B-tree index (varsayılan)
CREATE INDEX idx_users_email ON users(email);
-- Unique index
CREATE UNIQUE INDEX idx_users_username ON users(username);
-- Partial index
CREATE INDEX idx_active_users ON users(email) WHERE status = 'active';
-- Composite index
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);
-- GIN index (JSONB için)
CREATE INDEX idx_data_gin ON documents USING GIN(data);
-- Kullanılmayan indexleri bul
SELECT schemaname, tablename, indexname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0;
Yedekleme ve Geri Yükleme
# Tek veritabanı yedekleme
pg_dump -h localhost -U postgres myapp > myapp_backup.sql
# Sıkıştırılmış yedek
pg_dump -h localhost -U postgres -Fc myapp > myapp_backup.dump
# Tüm veritabanlarını yedekle
pg_dumpall -h localhost -U postgres > all_databases.sql
# Geri yükleme (SQL)
psql -h localhost -U postgres myapp < myapp_backup.sql
# Geri yükleme (Custom format)
pg_restore -h localhost -U postgres -d myapp myapp_backup.dump
Vacuum ve Bakım
-- Manual VACUUM
VACUUM VERBOSE users;
-- VACUUM FULL (tablo kilitleme gerektirir)
VACUUM FULL users;
-- ANALYZE (istatistik güncelleme)
ANALYZE users;
-- REINDEX
REINDEX TABLE users;
-- Autovacuum durumu
SELECT schemaname, relname, last_vacuum, last_autovacuum
FROM pg_stat_user_tables;
Sonuç
PostgreSQL, kurumsal düzeyde güvenilirlik ve performans sunar. Doğru yapılandırma ve düzenli bakım ile mükemmel veritabanı performansı elde edebilirsiniz.