PostgreSQL Kurulum ve Performans Optimizasyonu Rehberi

z

zafer ak

Yazar

30 December 2025 3 dakika okuma 497 görüntülenme
PostgreSQL Kurulum ve Performans Optimizasyonu Rehberi
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 Database

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
Database Management

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
Database Query

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.

İlgili Yazılar