Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Linux Yönetim

PostgreSQL Tam Rehberi: Kurulum, Yapılandırma ve Temel Özellikler

PostgreSQL, günümüzde mevcut olan en güçlü açık kaynaklı ilişkisel veritabanı yönetim sistemlerinden (RDBMS) biridir. Stabilitesi, genişletilebilirliği ve SQL standartlarına uyumluluğu ile tanınan PostgreSQL, geliştiriciler, veri mühendisleri ve kuruluşlar tarafından dünya çapında güvenle büyük ve karmaşık veri setlerini yönetmek için kullanılmaktadır. Bir web uygulaması, veri ambarı veya mikro hizmetler arka ucu oluşturuyor olsanız da, PostgreSQL projenizin talep ettiği performans ve güvenilirliği sağlar.

Bu kapsamlı rehber, bilmeniz gereken her şeyi kapsar: PostgreSQL nedir, öne çıkan özellikleri nelerdir, Ubuntu’ya nasıl yüklenir ve hızlı bir şekilde çalışmaya başlamak için gerekli veritabanı işlemleri nasıl gerçekleştirilir.

1. PostgreSQL Nedir?

PostgreSQL — genellikle "Postgres" olarak anılır — geleneksel ilişkisel veritabanlarının yeteneklerini genişleten bir nesne-ilişkisel veritabanı yönetim sistemidir (ORDBMS). Daha basit SQL motorlarından farklı olarak, PostgreSQL gelişmiş veri türlerini (JSON, diziler ve hstore dahil), prosedürel dilleri ve kullanıcı tanımlı işlevleri destekler; bu da onu basit web uygulamalarından karmaşık analitik iş yüklerine kadar geniş bir yelpazede uygulamalar için uygun hale getirir.

1996’da ilk kez yayınlanan ve canlı bir açık kaynak topluluğu tarafından desteklenen PostgreSQL, Oracle ve Microsoft SQL Server gibi ticari çözümlerle doğrudan rekabet eden — sıfır lisans maliyetiyle — üretim sınıfı bir veritabanı motoruna dönüşmüştür.

PostgreSQL’i Diğer Veritabanlarından Neden Seçmelisiniz?

ÖzellikPostgreSQLMySQLSQLite
ACID Uyumluluğu✅ Tam✅ Kısmi✅ Sınırlı
JSON Desteği✅ Yerel✅ Temel
Özel Veri Türleri✅ Evet❌ Hayır❌ Hayır
Tam Metin Arama✅ Yerleşik✅ Temel
Genişletilebilirlik✅ Yüksek⚠️ Orta❌ Düşük
Eşzamanlılık (MVCC)✅ Evet⚠️ Sınırlı❌ Hayır

2. PostgreSQL’nin Temel Özellikleri

PostgreSQL’i olağanüstü kılan şeyleri anlamak, altyapınızda tam potansiyelinden yararlanmanıza yardımcı olacaktır.

2.1. Gelişmiş Veri Türleri

PostgreSQL, çoğu veritabanının sunduğundan çok daha geniş bir yerel veri türü yelpazesini destekler:

  • İlkel türler: INTEGER, NUMERIC, VARCHAR, BOOLEAN, DATE, TIMESTAMP
  • Yapılandırılmış türler: Arrays, Composite types, Range types
  • Belge türleri: JSON ve JSONB (daha hızlı sorgulama için ikili JSON)
  • Ağ türleri: INET, CIDR, MACADDR — ağ ile ilgili uygulamalar için ideal
  • Geometrik türler: POINT, LINE, POLYGON — GIS uygulamaları için yararlı
  • UUID: Evrensel olarak benzersiz tanımlayıcılar için yerel destek
  • Tam Metin Arama (FTS): Yerleşik tsvector ve tsquery türleri, harici araçlara ihtiyaç duymadan güçlü, dile duyarlı tam metin aramasını etkinleştirir

Bu çok yönlülük, neredeyse her gerçek dünya veri yapısını doğrudan veritabanında modelleyebileceğiniz anlamına gelir.

2.2. Genişletilebilirlik

PostgreSQL genişletilmek üzere tasarlanmıştır. Çekirdek motoru değiştirmeden işlevselliğini özelleştirebilir ve genişletebilirsiniz:

  • Özel İşlevler ve Saklı Yordamlar: PL/pgSQL, PL/Perl, PL/Python, PL/Tcl veya hatta PL/V8 (JavaScript) kullanarak iş mantığını doğrudan veritabanında yazın
  • Özel Operatörler ve Toplamalar: Veri türlerinize uyarlanmış kendi operatörlerinizi tanımlayın
  • Uzantılar: PostgreSQL uzantı ekosistemi geniştir. Popüler uzantılar şunları içerir:
PostGIS — gelişmiş coğrafi veri desteği
pg_stat_statements — sorgu performans izleme
pgcrypto — kriptografik işlevler
uuid-ossp — UUID üretimi
TimescaleDB — zaman serisi veri optimizasyonu

2.3. Eşzamanlılık ve İşlem Kontrolü
PostgreSQL, Çok Sürümlü Eşzamanlılık Kontrolü (MVCC) aracılığıyla eşzamanlı erişimi zarif bir şekilde yönetir:

MVCC: Okuma sırasında satırları kilitlemek yerine, PostgreSQL her işlem için verilerin bir anlık görüntüsünü oluşturur. Bu, okuyucuların ve yazıcıların birbirini engellemeden aynı anda çalışmasına izin vererek, yüksek eşzamanlılık altında performansı önemli ölçüde iyileştirir.
ACID Uyumluluğu: PostgreSQL’deki her işlem tamamen ACID uyumludur:
Atomiklik — işlemler tamamen tamamlanır veya hiç tamamlanmaz
Tutarlılık — veriler her zaman bir geçerli durumdan diğerine geçer
İzolasyon — eşzamanlı işlemler birbirini etkilemez
Dayanıklılık — taahhüt edilen veriler Write-Ahead Logging (WAL) aracılığıyla sistem çökmelerinden kurtulur
Kayıt Noktaları: Tek bir işlem bloğu içinde ince taneli işlem kontrolü
İki Aşamalı Taahhüt (2PC): Birden fazla veritabanı düğümü arasında dağıtılmış işlemleri destekler

2.4. Güvenlik Özellikleri
PostgreSQL, kurumsal sınıf güvenlik yeteneklerini içerir:

Rol tabanlı erişim kontrolü (RBAC) ayrıntılı ayrıcalık yönetimi ile
Satır Düzeyinde Güvenlik (RLS) — kullanıcı başına satır düzeyinde veri erişimini kısıtlayın
SSL/TLS şifrelemesi aktarım sırasında bağlantılar için
SCRAM-SHA-256 ve MD5 kimlik doğrulaması
pg_hba.conf — esnek ana bilgisayar tabanlı kimlik doğrulama yapılandırması

2.5. Yüksek Kullanılabilirlik ve Çoğaltma

Akış Çoğaltması: Gerçek zamanlı birincil-çoğaltma çoğaltması
Mantıksal Çoğaltma: Belirli tabloları veya yayınları seçici olarak çoğaltın
Zaman İçinde Belirli Noktaya Kurtarma (PITR): WAL arşivlerini kullanarak veritabanınızı herhangi bir belirli ana geri yükleyin
Yük Devretme Desteği: Patroni, repmgr ve pgBouncer gibi bağlantı havuzu araçlarıyla uyumlu

3. Ubuntu’da PostgreSQL Kurulumu
Bu bölüm, Ubuntu 22.04 LTS üzerinde tam, üretime hazır bir PostgreSQL kurulumunda size rehberlik eder. Aynı adımlar Ubuntu 20.04 için de geçerlidir ve küçük değişiklikler içerir.
> Ön Koşullar: Ubuntu 22.04 LTS çalıştıran ve sudo ayrıcalıklarına sahip bir sunucu. Güvenilir bir sunucu ortamına ihtiyacınız varsa, AlexHost’tan VPS Hosting düşünün — veritabanı iş yükleri çalıştırmak için garantili kaynaklar ve tam root erişimi ile idealdir.
Adım 1: Paket İndeksini Güncelle
Her zaman en son kullanılabilir sürümü yüklediğinizden emin olmak için paket listelerinizi yenileyerek başlayın:
sudo apt update && sudo apt upgrade -y
Adım 2: PostgreSQL’i Kur
PostgreSQL’i postgresql-contrib paketiyle birlikte kurun; bu paket ek yardımcı programlar ve uzantılar içerir:
sudo apt install postgresql postgresql-contrib -y
Bu, PostgreSQL 14’ü (veya Ubuntu deponuzda mevcut olan en son sürümü) kurar. Resmi PostgreSQL APT deposundan belirli bir sürümü (örneğin PostgreSQL 16) kurmak için aşağıdakileri kullanın:
# Add the PostgreSQL APT repository
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the signing key
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

# Update and install
sudo apt update
sudo apt install postgresql-16 -y
Adım 3: PostgreSQL Hizmetini Başlat ve Etkinleştir
Kurulumdan sonra, hizmeti başlatın ve sistem önyüklemesinde otomatik olarak başlaması için yapılandırın:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Adım 4: Kurulumu Doğrula
PostgreSQL’in doğru şekilde çalıştığını doğrulayın:
sudo systemctl status postgresql
Beklenen çıktı:
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
     Active: active (running) since ...
Yüklü sürümü de kontrol edebilirsiniz:
psql --version
# Output: psql (PostgreSQL) 16.x
Adım 5: PostgreSQL’i Uzaktan Erişim İçin Yapılandır (İsteğe Bağlı)
Varsayılan olarak, PostgreSQL yalnızca localhost’u dinler. Uzaktan bağlantılara izin vermek için (örneğin, uygulama sunucunuzdan), ana yapılandırma dosyasını düzenleyin:
sudo nano /etc/postgresql/16/main/postgresql.conf
Bu satırı bulun ve değiştirin:
listen_addresses = 'localhost'
Bunu şu şekilde değiştirin:
listen_addresses = '*'
Ardından ana bilgisayar tabanlı kimlik doğrulama dosyasını güncelleyin:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Belirli bir IP aralığına izin vermek için aşağıdaki satırı ekleyin (gerçek IP aralığınızla değiştirin):
host    all             all             192.168.1.0/24          scram-sha-256
Değişiklikleri uygulamak için PostgreSQL’i yeniden başlatın:
sudo systemctl restart postgresql
> Güvenlik Notu: Her zaman uzaktan erişimi bilinen IP adreslerine kısıtlayın ve güvenlik duvarınızın (UFW veya iptables) uygun şekilde yapılandırıldığından emin olun. Veritabanı sunucunuzu AlexHost’tan bir SSL Sertifikası ile eşleştirerek tüm aktarımdaki verileri şifreleyin.
4. PostgreSQL Temel Kullanımı
PostgreSQL kurulduğuna göre, her yöneticinin ve geliştiricinin bilmesi gereken temel işlemleri inceleyelim.
Adım 1: PostgreSQL Shell’e Erişim
PostgreSQL, kurulum sırasında postgres adında varsayılan bir sistem kullanıcısı oluşturur. Bu kullanıcıya geçin ve etkileşimli shell’i açın:
sudo -i -u postgres
psql
PostgreSQL istemini görmelisiniz:
postgres=#
Alternatif olarak, kullanıcı değiştirmeden shell’e doğrudan erişebilirsiniz:
sudo -u postgres psql
Adım 2: Veritabanı Oluşturma
Uygulamanız için yeni bir veritabanı oluşturun:
CREATE DATABASE mydatabase;
Oluşturulduğunu doğrulayın:
l
Bu, sunucudaki tüm veritabanlarını listeler.
Adım 3: Kullanıcı (Role) Oluşturma
Güvenli bir parolayla adanmış bir veritabanı kullanıcısı oluşturun:
CREATE USER myuser WITH PASSWORD 'StrongP@ssw0rd!';
En iyi uygulama: uygulama bağlantıları için varsayılan postgres süper kullanıcısını kullanmaktan kaçının. Her zaman minimal ayrıcalıklara sahip adanmış bir role oluşturun.
Adım 4: Ayrıcalıkları Verme
Yeni kullanıcıya veritabanına tam erişim izni verin:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
Daha ayrıntılı kontrol için, bireysel şemalar ve tablolar üzerinde belirli ayrıcalıklar verebilirsiniz:
-- Connect to the database first
c mydatabase

-- Grant usage on the public schema
GRANT USAGE ON SCHEMA public TO myuser;

-- Grant privileges on all existing tables
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myuser;

-- Ensure future tables are also accessible
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO myuser;
Adım 5: Yeni Kullanıcı Olarak Veritabanına Bağlanma
Geçerli oturumu kapatın ve yeni kullanıcı olarak yeniden bağlanın:
q
Ardından doğrudan bağlanın:
psql -U myuser -d mydatabase -h localhost
Adım 6: Tablo Oluşturma ve Veri Ekleme
Bağlandıktan sonra, ilk tablonuzu oluşturun:
CREATE TABLE employees (
    id          SERIAL PRIMARY KEY,
    first_name  VARCHAR(50) NOT NULL,
    last_name   VARCHAR(50) NOT NULL,
    email       VARCHAR(100) UNIQUE NOT NULL,
    department  VARCHAR(50),
    salary      NUMERIC(10, 2),
    hired_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Bazı kayıtlar ekleyin:
INSERT INTO employees (first_name, last_name, email, department, salary)
VALUES
    ('Alice', 'Johnson', 'alice@example.com', 'Engineering', 85000.00),
    ('Bob', 'Smith', 'bob@example.com', 'Marketing', 72000.00),
    ('Carol', 'Williams', 'carol@example.com', 'Engineering', 91000.00);
Verileri sorgulayın:
SELECT first_name, last_name, department, salary
FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC;
Adım 7: Temel psql Komutları Referansı




Komut
Açıklama




l
Tüm veritabanlarını listele


c dbname
Bir veritabanına bağlan


dt
Geçerli veritabanındaki tüm tabloları listele


d tablename
Tablo yapısını açıkla


du
Tüm kullanıcıları/rolleri listele


i file.sql
SQL’i bir dosyadan çalıştır


timing
Sorgu yürütme süresi görüntüsünü aç/kapat


q
psql’den çık


?
psql komutları için yardım


h
SQL komutları için yardım




5. PostgreSQL Performans Ayarlaması Temelleri
Varsayılan PostgreSQL kurulumu kaynak kullanımında muhafazakardır. Üretim ortamları için yapılandırmayı ayarlamak performansı önemli ölçüde iyileştirir.
postgresql.conf içindeki Anahtar Parametreler
sudo nano /etc/postgresql/16/main/postgresql.conf




Parametre
Varsayılan
Önerilen (8GB RAM sunucu)




shared_buffers
128MB
2GB (RAM’in %25’i)


effective_cache_size
4GB
6GB (RAM’in %75’i)


work_mem
4MB
64MB


maintenance_work_mem
64MB
512MB


max_connections
100
200 (daha fazla için pgBouncer kullanın)


wal_buffers
-1 (otomatik)
64MB


checkpoint_completion_target
0.9
0.9




Hizmeti yeniden başlatarak değişiklikleri uygulayın:
sudo systemctl restart postgresql
İndeksleme En İyi Uygulamaları
İndeksler sorgu performansı için kritiktir:
-- B-tree index (default, for equality and range queries)
CREATE INDEX idx_employees_department ON employees(department);

-- Partial index (index only a subset of rows)
CREATE INDEX idx_high_earners ON employees(salary) WHERE salary > 80000;

-- Composite index (for multi-column queries)
CREATE INDEX idx_dept_salary ON employees(department, salary DESC);

-- GIN index (for full-text search and JSONB)
CREATE INDEX idx_fts ON articles USING GIN(to_tsvector('english', content));
6. Yedekleme ve Kurtarma
Veri koruması tartışılmaz. PostgreSQL, yedekleme ve kurtarma için güçlü yerleşik araçlar sağlar.
pg_dump ile Mantıksal Yedekleme
# Backup a single database
pg_dump -U postgres -d mydatabase -F c -f /backups/mydatabase_$(date +%Y%m%d).dump

# Backup all databases
pg_dumpall -U postgres > /backups/all_databases_$(date +%Y%m%d).sql
Yedeklemeden Geri Yükleme
# Restore a custom-format dump
pg_restore -U postgres -d mydatabase -F c /backups/mydatabase_20240101.dump

# Restore from SQL file
psql -U postgres -d mydatabase < /backups/all_databases_20240101.sql
Otomatik Yedekleme Betiği
#!/bin/bash
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="mydatabase"

mkdir -p "$BACKUP_DIR"
pg_dump -U postgres -F c -d "$DB_NAME" -f "$BACKUP_DIR/${DB_NAME}_${DATE}.dump"

# Retain only the last 7 days of backups
find "$BACKUP_DIR" -name "*.dump" -mtime +7 -delete

echo "Backup completed: ${DB_NAME}_${DATE}.dump"
Günlük otomatik yedeklemeler için bunu cron’a ekleyin:
crontab -e
# Add: 0 2 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_backup.log 2>&1
7. PostgreSQL Hosting: Doğru Altyapıyı Seçmek
PostgreSQL dağıtımınızın performansı ve güvenilirliği, temel altyapıya büyük ölçüde bağlıdır. İş yükünüze bağlı olarak en iyi hosting seçenekleri şunlardır:
Geliştirme ve Küçük Uygulamalar İçin
Paylaşımlı Web Hosting küçük projeler için uygun bir giriş noktası sağlar. Ancak, veritabanı yoğun uygulamalar için özel kaynaklar şiddetle önerilir.
Üretim Web Uygulamaları İçin
Bir VPS Hosting planı size özel CPU ve RAM, tam root erişimi ve PostgreSQL yapılandırma parametrelerini ayarlama yeteneği verir — bu, üretim sınıfı veritabanı performansı için gereklidir. AlexHost VPS planları NVMe SSD depolama ile kullanılabilir ve bu, PostgreSQL I/O gecikmesini önemli ölçüde azaltır.
Yönetilen bir kontrol paneli deneyimini tercih ederseniz, cPanel ile VPS sunucu yönetimini basitleştirirken yine de PostgreSQL örneğinize erişim sağlar.
Yüksek Trafikli ve Kurumsal İş Yükleri İçin
AlexHost’tan Dedicated Servers kaynak paylaşımı olmaksızın maksimum performans sağlar. Bu, günde milyonlarca işlem işleyen, karmaşık analitik sorgular çalıştıran veya yüksek kullanılabilirlik çoğaltma kurulumları için ideal seçimdir.
AI ve Machine Learning İş Yükleri İçin
PostgreSQL’i machine learning boru hatları ile birlikte kullanıyorsanız (örneğin, vektör benzerlik araması için pgvector ile), AlexHost’tan GPU Hosting AI tarafından yönlendirilen veri işleme için gereken hesaplama gücünü sunar.
8. Security Hardening Checklist
Üretim ortamında PostgreSQL dağıtmadan önce, bu güvenlik kontrol listesini gözden geçirin:

[ ] Varsayılan postgres parolasını değiştirin: ALTER USER postgres WITH PASSWORD 'NewStrongPassword!';
  • [ ] Süper kullanıcı için uzaktan erişimi devre dışı bırakın pg_hba.conf içinde
  • [ ] Her uygulama için minimal ayrıcalıklara sahip özel roller kullanın
  • [ ] SSL bağlantılarını etkinleştirin postgresql.conf içinde: ssl = on
  • [ ] Güvenlik duvarı kurallarını yapılandırın ve port 5432’yi yalnızca bilinen IP’lere kısıtlayın
  • [ ] Satır Düzeyinde Güvenlik (RLS) etkinleştirin çok kiracılı uygulamalar için
  • [ ] Kullanıcı ayrıcalıklarını düzenli olarak denetleyin: du ve dp
  • [ ] PostgreSQL’i güncel tutun güvenlik yamaları almak için
  • [ ] Günlükleri izleyin /var/log/postgresql/ adresinde şüpheli etkinlikler için
  • [ ] Otomatik yedeklemeleri uygulayın site dışı depolama ile
  • Sonuç

    PostgreSQL, kurumsal yazılımın güvenilirliğini açık bir platformun esnekliğiyle birleştiren dünya standartlarında bir açık kaynak veritabanı yönetim sistemidir. Gelişmiş veri türlerinden ve MVCC eşzamanlılık modelinden, zengin uzantı ekosistemine ve güçlü güvenlik özelliklerine kadar, PostgreSQL en zorlu veri yönetimi sorunlarını çözmek için tasarlanmıştır.

    Bu kılavuzu takip ederek şunları öğrendiniz:

    • Ubuntu’da PostgreSQL’i yüklemek ve yapılandırmak
    • Veritabanları, kullanıcılar oluşturmak ve ayrıcalıkları yönetmek
    • Temel CRUD işlemlerini gerçekleştirmek
    • Üretim iş yükleri için performansı ayarlamak
    • Sağlam bir yedekleme ve kurtarma stratejisi uygulamak
    • PostgreSQL örneğinizi yaygın tehditlerden korumak

    Sonraki adım, veritabanınızı barındıracak doğru altyapıyı seçmektir. Uygun fiyatlı bir VPS Hosting çözümüne veya kurumsal iş yükleri için yüksek performanslı bir Dedicated Server‘a ihtiyacınız olsun, AlexHost PostgreSQL dağıtımınızın hak ettiği güvenilir, yüksek performanslı altyapıyı sağlar.