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
Yazar
REXE Teknoloji Ağ ve Güvenlik Ekibi
Editör
REXE Teknoloji Teknik Yayın Editörü
İlk yayın
Son güncelleme

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.

Sık Sorulan Sorular

PostgreSQL ile MySQL arasindaki temel fark nedir?

PostgreSQL tam ACID uyumlu, gelismis veri tipleri (JSON, JSONB, diziler, hstore), window fonksiyonlari ve guclu genisletilebilirlik sunar. MySQL genel olarak daha basit kurulum ve yonetim sunarken PostgreSQL karmasik sorgular ve buyuk veri setlerinde daha iyi performans gosterir. Yeni projeler icin PostgreSQL onerilir.

postgres kullanicisinin sifresini nasil degistirebilirim?

sudo -u postgres psql komutuyla PostgreSQL konsoluna baglanin, ardindan ALTER USER postgres WITH PASSWORD 'YeniSifre'; komutunu calistirin. Sistem kullanicisi sifresini degistirmek icin ise sudo passwd postgres komutunu kullanin.

Uzak baglanti kuramiyorum, ne yapmaliyim?

Uc seyi kontrol edin: 1) postgresql.conf dosyasinda listen_addresses = '*' oldugunu dogrulayin, 2) pg_hba.conf dosyasina ilgili IP icin host satiri eklediginiizi kontrol edin, 3) Firewall'da 5432 portunun acik oldugunu dogrulayin (ufw status veya iptables -L). Degisikliklerden sonra servisi yeniden baslatmayi unutmayin.

pg_dump ile alinan yedek ne kadar guvenilir?

pg_dump, tutarli bir anlık goruntu alir ve cok guvenilirdir. Buyuk veritabanlari icin -Fc (ozel format) kullanin; bu format paralel geri yukleme destekler ve daha kucuk dosya boyutu saglar. Kritik sistemler icin WAL arsivleme veya streaming replikasyon gibi daha gelismis yedekleme yontemlerini de degerlendirin.

PostgreSQL hangi porttan calisir ve nasil degistirilir?

PostgreSQL varsayilan olarak 5432 portunu kullanir. Degistirmek icin /etc/postgresql/16/main/postgresql.conf dosyasindaki port = 5432 satirini istediginiz port numarasiyla guncelleyin ve servisi yeniden baslatın. pg_hba.conf ve baglanti dizelerinizi de guncellemeyi unutmayin.

Birden fazla PostgreSQL surumu ayni sunucuda calisabilir mi?

Evet, her surum farkli bir portta calisabilir. Ornegin PostgreSQL 14 varsayilan 5432 portunda, PostgreSQL 16 ise 5433 portunda calisabilir. Her surum kendi veri dizinine ve servis birimine sahiptir. pg_lsclusters komutuyla mevcut tum kumeleri listeleyebilirsiniz.

İlgili Makaleler

MySQL ve MariaDB Kurulumu: Temel Yönetim Rehberi

MySQL ve MariaDB kurulumu, mysql_secure_installation, veritabanı ve kullanıcı oluşturma, temel SQL komutları, uzak erişim yapılandırması ve performans ayarları. Adım adım rehber.

14 dk
mysqlmariadbveritabanı

phpMyAdmin Kurulumu ve Güvenli Erişim Rehberi

phpMyAdmin kurulumu, Apache ve Nginx yapılandırması, SSL ile güvenli erişim, kullanıcı yönetimi ve güvenlik sertleştirme adımları. Adım adım rehber.

16 dk
phpmyadminmysqlmariadb
Ağ TrafiğiGelen GbpsGiden Gbps