PostgreSQL Kurulumu: Linux Sunucu Rehberi
Linux sunucuya PostgreSQL kurulumu. Rol ve veritabanı oluşturma, pg_hba.conf ile erişim, uzaktan bağlantı, pg_dump ile yedekleme ve performans ayarları.

İçindekiler
PostgreSQL, açık kaynaklı, güçlü ve veri bütünlüğüne önem veren bir ilişkisel veritabanıdır. Gelişmiş SQL özellikleri, JSON desteği, coğrafi veri eklentisi PostGIS ve sağlam işlem (transaction) yönetimiyle Django, Ruby on Rails, Laravel ve Node.js projelerinde sıkça tercih edilir. Kendi sunucunuzda PostgreSQL kurulumu birkaç dakika sürer; asıl öğrenilmesi gereken, rollerin ve erişim kurallarının nasıl çalıştığıdır.
Bu rehberde Ubuntu, Debian ve AlmaLinux sunuculara PostgreSQL kurulumunu, rol ve veritabanı oluşturmayı, pg_hba.conf ile erişimi, uzaktan güvenli bağlantıyı, yedeklemeyi ve temel performans ayarlarını anlatıyoruz.
PostgreSQL ve MariaDB karşılaştırması
| Özellik | PostgreSQL | MariaDB / MySQL |
|---|---|---|
| Güçlü olduğu alan | Karmaşık sorgular, veri bütünlüğü, JSON, PostGIS | Basit ve hızlı okuma ağırlıklı işler |
| Yaygın kullanım | Django, Rails, modern Node.js ve Laravel projeleri | WordPress, PHP uygulamaları, FiveM |
| Kullanıcı modeli | Roller ve pg_hba.conf kuralları | Kullanıcı ve host eşleşmesi |
| Varsayılan port | 5432 | 3306 |
Uygulamanız hangisini öneriyorsa onu kullanın. MariaDB kurulumunu MySQL ve MariaDB kurulumu rehberimizde anlattık.
Ubuntu ve Debian'a PostgreSQL kurulumu
Sunucunuza SSH ile bağlandıktan sonra:
sudo apt update
sudo apt install postgresql
sudo systemctl status postgresql
Dağıtımın deposu, o dağıtım sürümüyle birlikte gelen PostgreSQL sürümünü kurar. Daha yeni bir ana sürüm gerekiyorsa PostgreSQL'in resmî APT deposunu ekleyebilirsiniz.
AlmaLinux ve Rocky Linux'ta:
sudo dnf install postgresql-server
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
Roller ve ilk bağlantı
PostgreSQL'de kullanıcılar rol olarak adlandırılır. Kurulum, postgres adında bir yönetici rolü ve aynı adlı bir işletim sistemi kullanıcısı oluşturur. Yerel bağlantılarda varsayılan olarak peer kimlik doğrulaması kullanılır: İşletim sistemi kullanıcınızın adı, rolün adıyla eşleşmelidir. Bu yüzden yönetici olarak şöyle bağlanırsınız:
sudo -u postgres psql
psql içinde sık kullanacağınız komutlar:
| Komut | Ne yapar? |
|---|---|
\l | Veritabanlarını listeler |
\du | Rolleri listeler |
\c veritabani | Başka bir veritabanına geçer |
\dt | Bulunduğunuz veritabanındaki tabloları listeler |
\q | Çıkar |
Veritabanı ve rol oluşturma
Her uygulama için ayrı bir rol ve yalnızca o role ait bir veritabanı oluşturun:
CREATE ROLE uygulama WITH LOGIN PASSWORD 'guclu-bir-sifre';
CREATE DATABASE uygulama OWNER uygulama;
Veritabanının sahibi olan rol, içinde tablo oluşturup yönetebilir; diğer veritabanlarınıza erişemez. Uygulamanızın bağlantı adresi şöyle görünür:
postgresql://uygulama:guclu-bir-sifre@127.0.0.1:5432/uygulama
Komut satırından bu rolle bağlanmak için -h 127.0.0.1 ekleyin; böylece peer yerine şifreyle, TCP üzerinden bağlanırsınız:
psql -h 127.0.0.1 -U uygulama uygulama
pg_hba.conf ile erişim kuralları
Kimin, nereden, hangi yöntemle bağlanabileceğini pg_hba.conf dosyası belirler. Ubuntu ve Debian'da dosya /etc/postgresql/<sürüm>/main/pg_hba.conf yolundadır. Her satır bir kuraldır ve yukarıdan aşağıya ilk eşleşen kural uygulanır:
# TÜR VERİTABANI KULLANICI ADRES YÖNTEM
local all postgres peer
local all all peer
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
local: Unix soketi üzerinden, sunucunun içinden yapılan bağlantılar.host: TCP/IP üzerinden yapılan bağlantılar.scram-sha-256: Şifreyle güvenli kimlik doğrulama. Eskimd5yöntemi yerine bunu kullanın.
Dosyayı değiştirdikten sonra ayarları yeniden yükleyin:
sudo systemctl reload postgresql
Uzaktan güvenli bağlantı
Önerilen yol SSH tünelidir. PostgreSQL yalnızca sunucunun kendisini dinlemeye devam eder ve 5432 portu internete hiç açılmaz:
ssh -L 5433:127.0.0.1:5432 kullanici@203.0.113.10
Bu komut açıkken pgAdmin ya da DBeaver ile kendi bilgisayarınızdaki 127.0.0.1:5433 adresine bağlanırsınız. İki araçta da bağlantı ayarlarında hazır bir SSH tüneli seçeneği bulunur.
Doğrudan bağlantı gerekiyorsa (örneğin başka bir sunucudaki uygulama için):
postgresql.confdosyasındalisten_addresses = 'localhost'satırınılisten_addresses = '*'yapın.pg_hba.confdosyasına yalnızca o sunucunun IP adresi için bir kural ekleyin:host uygulama uygulama 198.51.100.7/32 scram-sha-256- PostgreSQL'i yeniden başlatın ve güvenlik duvarında portu yalnızca o adrese açın:
sudo systemctl restart postgresql sudo ufw allow from 198.51.100.7 to any port 5432 proto tcp
5432 portunu herkese açmak, sunucunuzun otomatik şifre deneme saldırılarıyla karşılaşması demektir. Port ayarlarını Port nedir? yazımızda anlattık.
Yedekleme ve geri yükleme
pg_dump, çalışan bir veritabanının tutarlı bir yedeğini veritabanını kilitlemeden alır. Sıkıştırılmış özel biçim (-Fc) hem küçük hem de esnektir:
sudo -u postgres pg_dump -Fc uygulama > uygulama-$(date +%F).dump
Geri yüklemek için:
pg_restore -h 127.0.0.1 -U uygulama -d uygulama --clean uygulama-2026-10-20.dump
Roller ve diğer sunucu geneli ayarlar pg_dump yedeğine dahil değildir; bunları pg_dumpall --globals-only ile ayrıca yedekleyin. Yedeklemeyi cron ile otomatikleştirmeyi ve yedekleri sunucudan bağımsız bir yerde tutmayı Sunucu yedekleme rehberimizde anlattık.
Temel performans ayarları
PostgreSQL'in varsayılan ayarları çok küçük sunuculara göre seçilmiştir. postgresql.conf dosyasında şu ayarlar büyük fark yaratır:
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 16MB
maintenance_work_mem = 512MB
Örnek değerler, yalnızca veritabanı çalışan 8 GB RAM'li bir sunucu içindir:
shared_buffers: PostgreSQL'in kendi önbelleği. RAM'in yaklaşık dörtte biri iyi bir başlangıçtır.effective_cache_size: Sorgu planlayıcısına işletim sisteminin dosya önbelleğiyle birlikte ne kadar bellek olduğunu söyler; RAM'in yarısı ile dörtte üçü arası bir değer verilir.work_mem: Her sıralama ve birleştirme işlemine ayrılan bellek. Çok yüksek değerler, çok sayıda eşzamanlı sorguda belleği tüketebilir.
Değişikliklerden sonra PostgreSQL'i yeniden başlatın. Yavaş sorguları bulmak için log_min_duration_statement = 500 ayarı, 500 milisaniyeden uzun süren sorguları günlüğe yazar; sorgunun neden yavaş olduğunu görmek için EXPLAIN ANALYZE kullanın.
PostgreSQL için Nodesty sunucuları
Veritabanı performansı büyük ölçüde belleğe ve disk hızına bağlıdır. Nodesty AMD EPYC 7763 VDS paketleri yüksek RAM'iyle büyük veritabanlarını bellekte tutmak için, AMD Ryzen 9 9950X VDS paketleri ise yüksek tek çekirdek hızıyla hızlı cevap vermesi gereken uygulamalar için uygundur. Her iki pakette de NVMe disk, nShield DDoS koruması ve 7 gün saklanan ücretsiz günlük yedekleme bulunur.
Sıkça Sorulan Sorular
PostgreSQL mi MariaDB mi kullanmalıyım?
Kullandığınız yazılım hangisini öneriyorsa onu seçin. WordPress ve birçok PHP uygulaması MySQL ya da MariaDB bekler. Gelişmiş sorgular, JSON verileri, coğrafi veriler ve sıkı veri bütünlüğü gerektiren yeni projelerde PostgreSQL güçlü bir seçimdir. İkisi de açık kaynaklı ve ücretsizdir.
postgres kullanıcısının şifresi nedir?
Varsayılan kurulumda postgres kullanıcısının şifresi yoktur; sunucuda sudo -u postgres psql komutuyla, işletim sistemi kullanıcısı üzerinden (peer kimlik doğrulaması) bağlanırsınız. Uygulamalarınız için postgres yerine her zaman ayrı ve şifreli bir rol oluşturun.
Peer authentication failed hatası neden olur?
Yerel bağlantılarda PostgreSQL varsayılan olarak işletim sistemi kullanıcı adının veritabanı rolüyle aynı olmasını bekler. Farklı bir rolle bağlanıyorsanız bağlantıya -h 127.0.0.1 ekleyerek TCP üzerinden ve şifreyle bağlanın ya da pg_hba.conf dosyasındaki yerel kuralı değiştirin.
PostgreSQL sürümünü nasıl yükseltirim?
Ana sürüm yükseltmelerinde veri dosyaları yeni sürümle doğrudan uyumlu değildir. Küçük veritabanlarında eski sürümden pg_dumpall ile döküm alıp yeni sürüme yüklemek en basit yoldur; büyük veritabanlarında pg_upgrade aracı kullanılır. Her iki durumda da önce tam bir yedek alın.
Veritabanına dışarıdan nasıl güvenle bağlanırım?
En güvenli yol SSH tünelidir; 5432 portunu internete açmadan pgAdmin ya da DBeaver gibi araçlarla bağlanırsınız. Doğrudan bağlantı gerekiyorsa listen_addresses ayarını değiştirin, pg_hba.conf dosyasına yalnızca bağlanacak IP adresi için bir kural ekleyin ve güvenlik duvarında portu yalnızca o adrese açın.
PostgreSQL için ne kadar RAM gerekir?
Küçük bir uygulama birkaç yüz MB ile çalışır. Performansı en çok shared_buffers ve işletim sisteminin dosya önbelleği belirler; sık kullanılan verilerin bellekte kalması sorguları belirgin şekilde hızlandırır. Yalnızca veritabanı çalışan bir sunucuda shared_buffers için RAM'in yaklaşık dörtte biri iyi bir başlangıçtır.
Yazar hakkında
Nodesty Ekibi · Altyapı ve Destek
Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.
İlgili yazılar

Load Balancer (Yük Dengeleyici) Nedir? Nasıl Çalışır?
Load balancer nedir, ne işe yarar? Yük dengeleme yöntemleri, sağlık kontrolleri, oturum yönetimi, Nginx ile yük dengeleme, HAProxy ve ne zaman gerekir.

Ubuntu Sürüm Yükseltme: Sunucuyu Yeni LTS Sürümüne Taşıma
Ubuntu sunucu yeni LTS sürümüne nasıl yükseltilir? Yedek, hazırlık, do-release-upgrade adımları, SSH bağlantısı, sonrası kontroller ve temiz kurulum.

Laravel Uygulamasını VDS'te Yayınlama Rehberi
Laravel uygulaması sunucuda nasıl yayınlanır? PHP-FPM, Composer, .env, veritabanı, dosya izinleri, Nginx, kuyruk işçisi, zamanlayıcı, SSL ve güncelleme.