Ana içeriğe geç
Kategoriye Dön

PostgreSQL Kurulum ve Temel Yönetim Rehberi

PostgreSQL kurulumu, kullanıcı ve veritabanı oluşturma, temel SQL komutları, uzak bağlantı yapılandırması ve yedekleme. Ubuntu/Debian ve RHEL/CentOS için adım adım rehber.

Okuma süresi: 15 dk Veritabanı
postgresqlveritabanıkurulumubuntucentossqlyedeklemelinux

İçindekiler

PostgreSQL Kurulum ve Temel Yönetim Rehberi

PostgreSQL, dünya genelinde en güçlü açık kaynaklı ilişkisel veritabanı yönetim sistemlerinden biridir. ACID uyumluluğu, gelişmiş veri tipleri, JSON desteği ve güçlü genişletilebilirliği ile kurumsal uygulamalardan küçük projelere kadar geniş bir kullanım alanına sahiptir. Bu rehberde PostgreSQL kurulumunu, temel yönetimini ve yapılandırmasını ele alacağız.

Ubuntu/Debian Üzerine Kurulum

Paket Deposundan Kurulum

Ubuntu ve Debian sistemlerde PostgreSQL resmi depolardan kurulabilir:

hljs bash
# Paket listesini güncelle
apt update

# PostgreSQL kur
apt install -y postgresql postgresql-contrib

# Servis durumunu kontrol et
systemctl status postgresql

# Otomatik başlatmayı etkinleştir
systemctl enable postgresql

PostgreSQL Resmi Deposunu Kullanma

Daha güncel sürüm için resmi PostgreSQL deposunu ekleyebilirsiniz:

hljs bash
# Gerekli araçları kur
apt install -y curl ca-certificates

# PostgreSQL imza anahtarını ekle
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

# Depoyu ekle
echo 'deb https://apt.postgresql.org/pub/repos/apt '$(lsb_release -cs)'-pgdg main' > /etc/apt/sources.list.d/pgdg.list

# Güncelle ve kur
apt update
apt install -y postgresql-16

RHEL/CentOS/AlmaLinux Üzerine Kurulum

hljs bash
# 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

# Sistem PostgreSQL modülünü devre disi birak
dnf -qy module disable postgresql

# PostgreSQL 16 kur
dnf install -y postgresql16-server postgresql16-contrib

# Veritabanini ilklendir
/usr/pgsql-16/bin/postgresql-16-setup initdb

# Servisi baslat ve etkinlestir
systemctl enable --now postgresql-16

# Servis durumunu kontrol et
systemctl status postgresql-16

PostgreSQL Sürümünü Doğrulama

hljs bash
psql --version
# Cikti: psql (PostgreSQL) 16.x

# Servis bilgisi
psql -U postgres -c 'SELECT version();'

postgres Kullanicisina Gecis ve Baglanti

PostgreSQL kurulumunda sistem kullanicisi olarak postgres olusturulur. Veritabanina baglanmak icin:

hljs bash
# postgres sistem kullanicisina gec
su - postgres

# PostgreSQL konsoluna baglan
psql

# Dogrudan psql'e baglan (root olarak)
sudo -u postgres psql

# Belirli bir veritabanina baglan
sudo -u postgres psql -d mydb

Kullanici ve Veritabani Olusturma

Yeni Kullanici Olusturma

hljs sql
-- PostgreSQL konsolunda
-- Yeni kullanici olustur
CREATE USER appuser WITH PASSWORD 'GucluSifre123!';

-- Superuser yetkisi ver (dikkatli kullanin)
CREATE USER adminuser WITH PASSWORD 'AdminSifre!' SUPERUSER;

-- Kullanicilari listele
\du

-- Kullanici sifresini degistir
ALTER USER appuser WITH PASSWORD 'YeniSifre456!';

-- Kullaniciya veritabani olusturma yetkisi ver
ALTER USER appuser CREATEDB;

Veritabani Olusturma ve Yetkilendirme

hljs sql
-- Veritabani olustur
CREATE DATABASE myapp OWNER appuser ENCODING 'UTF8' LC_COLLATE 'tr_TR.UTF-8' LC_CTYPE 'tr_TR.UTF-8' TEMPLATE template0;

-- Veritabanlarini listele
\l

-- Veritabanina baglan
\c myapp

-- Kullaniciya tam yetki ver
GRANT ALL PRIVILEGES ON DATABASE myapp TO appuser;

-- Schema yetkisi (PostgreSQL 15+)
GRANT ALL ON SCHEMA public TO appuser;

-- Veritabanini sil
DROP DATABASE eski_veritabani;

Temel SQL Komutlari

hljs sql
-- Tablo olustur
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  email VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Veri ekle
INSERT INTO users (username, email) VALUES ('ahmet', 'ahmet@example.com');

-- Veri sorgula
SELECT * FROM users;
SELECT username, email FROM users WHERE id = 1;

-- Veri guncelle
UPDATE users SET email = 'yeni@example.com' WHERE id = 1;

-- Veri sil
DELETE FROM users WHERE id = 5;

-- Tablolari listele
\dt

-- Tablo yapisini goruntule
\d users

-- Indeks olustur
CREATE INDEX idx_users_email ON users(email);

Uzak Baglanti Yapilandirmasi

Varsayilan olarak PostgreSQL sadece localhost'tan baglanti kabul eder. Uzak erisim icin iki dosyayi duzenlemeniz gerekir.

1. postgresql.conf Duzenleme

hljs bash
# Dosya konumunu bul
sudo -u postgres psql -c 'SHOW config_file;'

# Duzenle
nano /etc/postgresql/16/main/postgresql.conf
hljs ini
# listen_addresses satirini degistir
listen_addresses = '*'

# Port (varsayilan 5432)
port = 5432

2. pg_hba.conf Duzenleme

hljs bash
nano /etc/postgresql/16/main/pg_hba.conf
# Uzak baglanti icin satir ekle (dosyanin sonuna)
# TYPE  DATABASE  USER      ADDRESS         METHOD
host    myapp     appuser   192.168.1.0/24  scram-sha-256
host    all       all       0.0.0.0/0       scram-sha-256

3. Servisi Yeniden Baslat ve Firewall

hljs bash
# Servisi yeniden baslat
systemctl restart postgresql

# UFW ile port ac
ufw allow 5432/tcp

# iptables ile
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

PostgreSQL portunu (5432) internete acmak guvenlik riski olusturur. Mumkunse SSH tuneli veya VPN kullanin. Uzak erisim gerekiyorsa belirli IP adreslerine kisitlayin.

Yedekleme ve Geri Yukleme

pg_dump ile Yedekleme

hljs bash
# Tek veritabanini yedekle
pg_dump -U postgres myapp > myapp_backup.sql

# Sikistirilmis format (daha hizli geri yukleme)
pg_dump -U postgres -Fc myapp > myapp_backup.dump

# Tum veritabanlarini yedekle
pg_dumpall -U postgres > all_databases.sql

# Uzak sunucudan yedekle
pg_dump -h 192.168.1.100 -U postgres myapp > myapp_remote.sql

Yedekten Geri Yukleme

hljs bash
# SQL formatindan geri yukle
psql -U postgres myapp < myapp_backup.sql

# Sikistirilmis formattan geri yukle
pg_restore -U postgres -d myapp myapp_backup.dump

# Tum veritabanlarini geri yukle
psql -U postgres < all_databases.sql

Otomatik Yedekleme (Cron)

hljs bash
# Crontab duzenle
crontab -e

# Her gece 02:00'de yedek al
0 2 * * * pg_dump -U postgres myapp | gzip > /backup/myapp_$(date +\%Y\%m\%d).sql.gz

# 30 gunden eski yedekleri sil
0 3 * * * find /backup -name 'myapp_*.sql.gz' -mtime +30 -delete

Servis Yonetimi

hljs bash
# Servisi baslat
systemctl start postgresql

# Servisi durdur
systemctl stop postgresql

# Servisi yeniden baslat
systemctl restart postgresql

# Yapilandirmayi yeniden yukle (restart gerektirmez)
systemctl reload postgresql

# Logları goruntule
journalctl -u postgresql -f
tail -f /var/log/postgresql/postgresql-16-main.log

Sonuc

PostgreSQL, guvenilir ve yuksek performansli bir veritabani sistemidir. Kurulum sonrasi guvenlik yapilandirmasini ihmal etmeyin, duzzenli yedekleme yapın ve uzak erisim icin mutlaka kimlik dogrulama yontemlerini dogru yapilandirin. REXE sunucularinda PostgreSQL sorunsuz calisir ve yuksek trafik altinda guvenilir performans sunar.