
PostgreSQL Kurulumu ve Temel Yönetim: Güçlü Açık Kaynaklı Veritabanı
PostgreSQL kurulumu ve temel yönetim. Veritabanı, kullanıcı, şema oluşturma, psql kullanımı, yedekleme ve pg_hba.conf güvenlik yapılandırması.
PostgreSQL Kurulumu ve Temel Yönetim
PostgreSQL, güçlü, açık kaynaklı ve genişletilebilir bir ilişkisel veritabanı yönetim sistemidir. MySQL'e kıyasla daha zengin veri tipleri ve gelişmiş özellikler sunar.
PostgreSQL vs MySQL/MariaDB
| Özellik | PostgreSQL | MySQL/MariaDB |
|---|---|---|
| ACID uyumu | Tam | Tam (InnoDB) |
| JSON desteği | JSONB (indekslenebilir) | JSON |
| Full-text search | Gelişmiş | Temel |
| Tablespace | Destekler | Sınırlı |
| Stored Procedures | PL/pgSQL | Destekler |
| Lisans | PostgreSQL (açık) | GPL/Ticari |
Kurulum
Ubuntu/Debian:
apt install postgresql postgresql-contrib
# Servis başlat
systemctl enable --now postgresql
# Sürüm kontrolü
psql --version
RHEL/Rocky Linux:
# PostgreSQL resmi deposunu ekle
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf -qy module disable postgresql
dnf install -y postgresql16-server
# Başlat
postgresql-16-setup initdb
systemctl enable --now postgresql-16
psql Kullanımı
# postgres kullanıcısı olarak bağlan
sudo -u postgres psql
# Belirli veritabanına bağlan
sudo -u postgres psql -d sitem_db
# Uzak bağlantı
psql -h 192.168.1.100 -U kullanici -d sitem_db
Temel psql Komutları:
-- Yardım
\?
\h SELECT
-- Veritabanları listesi
\l
-- Bağlan
\c sitem_db
-- Tablo listesi
\dt
-- Tablo yapısı
\d kullanicilar
-- Kullanıcı listesi
\du
-- psql'den çık
\q
Kullanıcı Yönetimi
-- postgres olarak bağlı iken:
-- Kullanıcı (rol) oluştur
CREATE USER webkullanici WITH PASSWORD 'guclu_sifre';
-- Superuser oluştur
CREATE USER adminkullanici WITH PASSWORD 'sifre' SUPERUSER;
-- Şifre değiştir
ALTER USER webkullanici WITH PASSWORD 'yeni_sifre';
-- Kullanıcı sil
DROP USER eskikullanici;
-- Kullanıcıları listele
\du
-- veya
SELECT usename, usesuper, usecreatedb FROM pg_user;
Veritabanı Yönetimi
-- Veritabanı oluştur
CREATE DATABASE sitem_db
WITH OWNER = webkullanici
ENCODING = 'UTF8'
LC_COLLATE = 'tr_TR.UTF-8'
LC_CTYPE = 'tr_TR.UTF-8';
-- Yetki ver
GRANT ALL PRIVILEGES ON DATABASE sitem_db TO webkullanici;
-- Veritabanı sil
DROP DATABASE test_db;
-- Veritabanı boyutu
SELECT pg_size_pretty(pg_database_size('sitem_db'));
Şema Yönetimi
-- Şema oluştur (namespace)
CREATE SCHEMA app;
CREATE SCHEMA logs;
-- Şemada tablo oluştur
CREATE TABLE app.kullanicilar (
id SERIAL PRIMARY KEY,
kullanici_adi VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
olusturulma_tarihi TIMESTAMPTZ DEFAULT NOW()
);
-- Şema yetkisi
GRANT USAGE ON SCHEMA app TO webkullanici;
GRANT ALL ON ALL TABLES IN SCHEMA app TO webkullanici;
Tablo ve Veri Yönetimi
-- Tablo oluştur
CREATE TABLE urunler (
id SERIAL PRIMARY KEY,
isim VARCHAR(200) NOT NULL,
fiyat NUMERIC(10,2) NOT NULL,
stok INTEGER DEFAULT 0,
ozellikler JSONB,
etiketler TEXT[],
olusturulma TIMESTAMPTZ DEFAULT NOW()
);
-- Index oluştur
CREATE INDEX idx_urunler_isim ON urunler(isim);
CREATE INDEX idx_urunler_jsonb ON urunler USING GIN(ozellikler);
-- Veri ekle
INSERT INTO urunler (isim, fiyat, stok, ozellikler, etiketler)
VALUES ('Laptop', 15000.00, 50, '{"marka":"Dell","ram":"16GB"}', '{"bilgisayar","laptop"}');
-- JSONB sorgulama
SELECT isim FROM urunler WHERE ozellikler->>'marka' = 'Dell';
SELECT isim FROM urunler WHERE ozellikler @> '{"ram":"16GB"}';
-- Array sorgulama
SELECT isim FROM urunler WHERE 'laptop' = ANY(etiketler);
pg_hba.conf Güvenlik Yapılandırması
# Yapılandırma dosyası konumu
find /etc -name "pg_hba.conf" 2>/dev/null
# Genellikle: /etc/postgresql/16/main/pg_hba.conf
# pg_hba.conf formatı:
# TİP VERİTABANI KULLANICI ADRES METOD
# Lokal bağlantılar
local all postgres peer
local all all md5
# IPv4 lokal bağlantılar
host all all 127.0.0.1/32 md5
# Belirli IP'ye izin ver
host sitem_db webkullanici 192.168.1.0/24 md5
# Tüm IP'lerden SSL ile bağlantı
hostssl all all 0.0.0.0/0 md5
# Değişiklikleri uygula
systemctl reload postgresql
Yedekleme ve Geri Yükleme
# Tek veritabanı yedekle (SQL format)
sudo -u postgres pg_dump sitem_db > sitem_db.sql
# Binary format (daha hızlı geri yükleme)
sudo -u postgres pg_dump -Fc sitem_db > sitem_db.dump
# Tüm veritabanları
sudo -u postgres pg_dumpall > all_databases.sql
# Geri yükle
sudo -u postgres psql sitem_db < sitem_db.sql
sudo -u postgres pg_restore -d sitem_db sitem_db.dump
# Otomatik yedekleme
cat > /etc/cron.daily/pg-backup << 'EOF'
#!/bin/bash
BACKUP_DIR="/var/backups/postgresql"
mkdir -p $BACKUP_DIR
sudo -u postgres pg_dump sitem_db | gzip > $BACKUP_DIR/sitem_$(date +%Y%m%d).sql.gz
find $BACKUP_DIR -mtime +7 -delete
EOF
chmod +x /etc/cron.daily/pg-backup
Performans İzleme
-- Aktif bağlantılar
SELECT pid, usename, datname, client_addr, state, query
FROM pg_stat_activity
WHERE state != 'idle';
-- Tablo boyutları
SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) AS size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
-- Sorgu istatistikleri (pg_stat_statements gerekir)
SELECT query, calls, total_exec_time, rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
Büyükweb VDS sunucularında PostgreSQL full root erişimiyle tam kontrol size aittir. pgAdmin 4 ile görsel yönetim de mümkündür.
Veritabani Performans Optimizasyonu
Veritabani web uygulamalarinin kalbidir.
MySQL/MariaDB Tuning
innodb_buffer_pool_size'i RAM'in %60-70'ine ayarlayin. slow_query_log ile yavas sorgulari tespit edin. max_connections optimize edin.
Indeksleme
WHERE, JOIN, ORDER BY sutunlarina indeks ekleyin. EXPLAIN ile sorgu planlari analiz edin. Composite index kullanin.
Baglanti Havuzu
ProxySQL ile gelismis baglanti yonetimi. Connection pooling ile maliyet azaltma. Persistent connections kullanin.
Replikasyon
Master-Slave ile okuma yukunu dagitin. Galera Cluster ile multi-master yuksek erisilebilirlik. Semi-senkron replikasyon degerlendirin.
Yedekleme
mysqldump mantiksal, xtrabackup fiziksel yedek. Binary log ile point-in-time recovery. Incremental yedekleme ile tasarruf.
Sik Sorulan Sorular
MySQL mi PostgreSQL mi?
MySQL cogu web uygulamasi ile uyumlu. PostgreSQL gelismis veri tipleri ve JSON icin ideal. CMS'ler genelde MySQL kullanir.
Veritabanim buyudu ne yapmaliyim?
Gereksiz verileri temizleyin, tablo optimize edin, arsivleme yapin, partitioning kullanin.
Ne siklikla yedek almaliyim?
Kritik veritabanlari saatlik, standart siteler gunluk. Buyuk degisikliklerden once manuel yedek.
Sonuc
Veritabani optimizasyonu uygulama performansini dogrudan etkiler. Indeksleme, tuning ve yedekleme ile veri katmaninizi guclendirin.
Veritabani Boyut Yonetimi
Buyuk Tablolar icin Stratejiler
- Partitioning: Tarihe gore tablolari bolumlendirin. Sorgu performansi artar.
- Arsivleme: Eski verileri arsiv tablolarina tasiyin.
- Sikistirma: InnoDB sikistirmasi ile disk kullanimini %50-75 azaltin.
WordPress Veritabani Optimizasyonu
- wp_options autoload: Gereksiz autoload kayitlari temizleyin.
- Post revisions: wp-config.php'de WP_POST_REVISIONS sinirlayin.
- Transient veriler: Suresi dolmus verileri duzenli temizleyin.
- Spam yorumlar: Toplu silin.
Veritabani Guvenlik
- Varsayilan portu degistirin
- Uygulama bazli kullanici olusturun
- Minimum gerekli yetki verin
- SSL ile baglanti sifreleyin
- Duzenli guvenlik taramasi yapin
Hosting ve Sunucu Terimleri Sozlugu
| Terim | Aciklama |
|---|---|
| VDS | Virtual Dedicated Server - Sanal ozel sunucu |
| NVMe SSD | Non-Volatile Memory Express - En hizli disk teknolojisi |
| LiteSpeed | Yuksek performansli web sunucu yazilimi |
| CloudLinux | Paylasimli hosting icin kaynak izolasyon isletim sistemi |
| cPanel | Populer web hosting kontrol paneli |
| Plesk | Web hosting ve sunucu yonetim paneli |
| KVM | Kernel-based Virtual Machine - Tam sanallastirma teknolojisi |
| DDoS | Distributed Denial of Service - Dagitik hizmet engelleme saldirisi |
| SSL/TLS | Veri iletisimini sifreleyen guvenlik protokolu |
| TTFB | Time to First Byte - Sunucu yanit suresi |
| CDN | Content Delivery Network - Icerik dagitim agi |
| WAF | Web Application Firewall - Web uygulama guvenligi duvari |
| IOPS | Input/Output Operations Per Second - Disk performans olcusu |
| Uptime | Sunucunun kesintisiz calisma suresi yuzdesi |
| Bandwidth | Veri transfer kapasitesi |
Bu terimleri anlamak, hosting ve sunucu hizmetlerini daha bilinçli secmenize yardimci olur. Detayli bilgi icin Buyukweb blog yazilarini takip edin veya teknik destek ekibimize danisIn.
Teknik Destek ve Yardim Kanallari
Buyukweb olarak musterilerimize birden fazla destek kanali sunuyoruz:
Canli Destek (Tawk.to)
Web sitemiz uzerinden 7/24 canli destek ile aninda yardim alin. Teknik sorulariniz, fatura islemleriniz ve genel bilgi talepleriniz icin canli destek ekibimiz hizmetinizdedir.
Telefon Destegi
0850 302 60 70 numarasindan hafta ici ve hafta sonu teknik destek alabilirsiniz. Acil durumlar ve karmasik sorunlar icin telefon destegi en hizli cozum yoludur.
E-posta Destegi
destek@buyukweb.com adresine detayli sorun tanimlamanizi gonderin. Ekran goruntuleri ve hata mesajlari ile birlikte gonderdiginiz talepler daha hizli cozumlenir.
Musteri Paneli
my.buyukweb.com uzerinden destek talepleri olusturun, faturalarinizi yonetin ve hizmetlerinizi kontrol edin. Ticket sistemi ile tum iletisiminiz kayit altindadir.
Bilgi Bankasi
Blog yazilarimiz ve rehberlerimiz ile sik karsilasilan sorunlarin cozumlerini kendiniz bulabilirsiniz. WordPress kurulumu, DNS ayarlari, e-posta yapilandirmasi gibi konularda adim adim rehberler mevcuttur.
Buyukweb teknik ekibi, hosting alaninda 17 yillik tecrubesi ile her turlu sorununuza profesyonel cozum sunar.
Etiketler:

