Arch Linux’ta PostgreSQL ve pgAdmin4 Kurulumu ve Kullanımı – Adım Adım Rehber

1348 kelime
6 dakika
Seviye 6.45

🚀 Giriş

PostgreSQL, güçlü bir ilişkisel veritabanı sistemi olarak veri güvenliği, JSON desteği ve esnek yapısıyla bilinir. Arch Linux ise minimal yapısı ve güncel paketleri sayesinde PostgreSQL kurulumu için mükemmel bir ortam sunar.

Bu rehberde adım adım:

  • PostgreSQL’in kurulumu
  • Veritabanı ve kullanıcı oluşturma
  • pgAdmin4 ile görsel yönetim
  • Karşılaşabileceğiniz yaygın hatalar ve çözümler

…konularını işleyeceğiz. Hazırsanız başlayalım! 🔧


📌 1. PostgreSQL Kurulumu

Arch Linux’ta pacman paket yöneticisi ile kurulum çok basittir. Hadi başlayalım.

✅ Adım 1: Paketi İndirme ve Kurulum

Terminali açıp aşağıdaki komutu çalıştırın:

Bash
sudo pacman -S postgresql

Onaylamak için y tuşuna basmanız yeterlidir.

Bilgi

Arch Linux’un rolling release yapısı sayesinde PostgreSQL her zaman güncel gelir. Bu, güvenlik açısından büyük bir avantajdır.

✅ Adım 2: Servisi Başlatma ve Enable Etme

Kurulum tamamlandıktan sonra servisi başlatalım ve sistem açılışında otomatik çalışmasını sağlayalım:

Bash
sudo systemctl start postgresql
sudo systemctl enable postgresql

Durumu kontrol etmek için:

Bash
systemctl status postgresql
Bilgi

Servis durumu: active (running) ise her şey yolunda demektir. 👍

örnek çıktı:

Bash
[friday13@baba ~]$ systemctl status postgresql
● postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; preset: disabled)
     Active: active (running) since Fri 2025-08-15 00:38:54 +03; 3h 17min ago
 Invocation: 38373934efff4bf99d54aa90fadb77da
       Docs: man:postgres(1)
    Process: 399869 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data (code=exited, status=0/SUCCESS)
   Main PID: 399872 (postgres)
      Tasks: 9 (limit: 18626)
     Memory: 36.7M (peak: 92.2M, swap: 31.9M, swap peak: 31.9M)
        CPU: 2.873s
     CGroup: /system.slice/postgresql.service
             ├─399872 /usr/bin/postgres -D /var/lib/postgres/data
             ├─399875 "postgres: checkpointer "
             ├─399876 "postgres: background writer "
             ├─399879 "postgres: walwriter "
             ├─399880 "postgres: autovacuum launcher "
             ├─399881 "postgres: logical replication launcher "
             ├─479979 "postgres: crm_user crm_db ::1(55162) idle"
             ├─479980 "postgres: crm_user postgres ::1(55176) idle"
             └─479981 "postgres: crm_user servis_crm_db ::1(55182) idle"

Ağu 15 00:58:54 baba postgres[399875]: 2025-08-15 00:58:54.656 +03 [399875] LOG:  checkpoint starting: time
Ağu 15 00:59:07 baba postgres[399875]: 2025-08-15 00:59:07.122 +03 [399875] LOG:  checkpoint complete: wrote 125 buffers (0.8%); 0 WAL file(s) added, 0 removed, 0 recycled; write=12.439 s, sync=0.019 s, total=12.467 s; sync files=125, longest=0.004 s, average=0.001 s; distance=705 kB, estimate=3540 kB; lsn=0/1EC>
Ağu 15 01:53:54 baba postgres[399875]: 2025-08-15 01:53:54.983 +03 [399875] LOG:  checkpoint starting: time
Ağu 15 01:53:55 baba postgres[399875]: 2025-08-15 01:53:55.297 +03 [399875] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.302 s, sync=0.005 s, total=0.314 s; sync files=2, longest=0.005 s, average=0.003 s; distance=15 kB, estimate=3188 kB; lsn=0/1ECC7D0, r>
Ağu 15 02:03:54 baba postgres[399875]: 2025-08-15 02:03:54.447 +03 [399875] LOG:  checkpoint starting: time
Ağu 15 02:03:58 baba postgres[399875]: 2025-08-15 02:03:58.975 +03 [399875] LOG:  checkpoint complete: wrote 46 buffers (0.3%); 0 WAL file(s) added, 0 removed, 0 recycled; write=4.513 s, sync=0.009 s, total=4.529 s; sync files=30, longest=0.005 s, average=0.001 s; distance=27 kB, estimate=2871 kB; lsn=0/1ED3580,>
Ağu 15 02:28:55 baba postgres[399875]: 2025-08-15 02:28:55.350 +03 [399875] LOG:  checkpoint starting: time
Ağu 15 02:28:55 baba postgres[399875]: 2025-08-15 02:28:55.562 +03 [399875] LOG:  checkpoint complete: wrote 2 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.201 s, sync=0.005 s, total=0.213 s; sync files=2, longest=0.005 s, average=0.003 s; distance=6 kB, estimate=2585 kB; lsn=0/1ED4F08, re>
Ağu 15 03:03:55 baba postgres[399875]: 2025-08-15 03:03:55.741 +03 [399875] LOG:  checkpoint starting: time
Ağu 15 03:03:56 baba postgres[399875]: 2025-08-15 03:03:56.153 +03 [399875] LOG:  checkpoint complete: wrote 4 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.402 s, sync=0.004 s, total=0.412 s; sync files=2, longest=0.004 s, average=0.002 s; distance=12 kB, estimate=2328 kB; lsn=0/1ED8100, r>
Bilgi

PostgreSQL servisi çalışıyor ve durumu aşağıdaki gibi gözlemlenebilir:

[friday13@baba ~]$ systemctl status postgresql
● postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; preset: disabled)
     Active: active (running) since Fri 2025-08-15 00:38:54 +03; 3h 17min ago
     Main PID: 399872 (postgres)
     Tasks: 9 (limit: 18626)
    

✅ Adım 3: Varsayılan Kullanıcıyı Şifreleme

PostgreSQL, postgres adlı bir kullanıcıyla birlikte gelir. Bu kullanıcıya güçlü bir şifre vermek kritik önemdedir:

Bash
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'sizin_sifreniz';"
İpucu

💡 Ben genellikle test ortamları için `postgres_test` gibi geçici kullanıcılar oluşturuyorum; böylece üretim ve test karışmıyor.

✅ Adım 4: Veritabanı ve Kullanıcı Oluşturma

Örnek olarak bir CRM uygulaması için veritabanı ve kullanıcı oluşturalım:

Bash
sudo -u postgres createdb crm_db
sudo -u postgres createuser --superuser crm_user
sudo -u postgres psql -c "ALTER USER crm_user WITH PASSWORD 'crm_sifresi';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE crm_db TO crm_user;"
İpucu

Veritabanı ve kullanıcı adlarını proje isimlendirmesine uygun seçmek ileride karışıklıkları önler. Örneğin crm_user_dev veya crm_user_prod gibi adlar kullanabilirsiniz.


🛠️ 2. PostgreSQL Yapılandırması

PostgreSQL’in yapılandırma dosyaları genellikle /var/lib/postgres/data/ dizininde bulunur. Bu dizin içinde postgresql.conf ve pg_hba.conf dosyaları yer alır ve veritabanınızın davranışını belirler.

✅ Adım 1: Dosya Konumlarını Kontrol Etme

Bash
sudo -u postgres ls /var/lib/postgres/data/

✅ Adım 2: pg_hba.conf Düzenleme

Bağlantı izinlerini ayarlamak için dosyayı açın:

Bash
sudo nano /var/lib/postgres/data/pg_hba.conf

Örnek ayar:

Text Only
# Yerel bağlantılar
host    all             all             127.0.0.1/32            trust

# Ağ bağlantıları
host    all             all             192.168.1.0/24          md5
Uyarı

Üretim ortamında 'trust' yerine 'md5' veya 'scram-sha-256' kullanmanız güvenlik açısından kritik öneme sahiptir.

✅ Adım 3: postgresql.conf Ayarları

Bash
sudo nano /var/lib/postgres/data/postgresql.conf

Performans için önerilen parametreler:

Text Only
listen_addresses = '*'  
port = 5432  
max_connections = 100  
shared_buffers = 128MB  

✅ Adım 4: Servisi Yeniden Başlatma

Bash
sudo systemctl restart postgresql
Bilgi

🔧 Not: Değişiklikleri hemen test etmek için psql ile bağlanıp \l komutu ile veritabanlarını listeleyebilirsiniz.


🖥️ 3. pgAdmin4 Kurulumu

✅ Adım 1: Gerekli Dizinleri Oluşturma

Bash
sudo mkdir /var/lib/pgadmin
sudo mkdir /var/log/pgadmin
sudo chown $USER /var/lib/pgadmin
sudo chown $USER /var/log/pgadmin

✅ Adım 2: Python Sanal Ortamı

Bash
python3 -m venv pgadmin-env
source pgadmin-env/bin/activate

✅ Adım 3: pgAdmin4 Kurulumu

Bash
pip install pgadmin4

✅ Adım 4: pgAdmin4’ü Çalıştırma

Bash
pgadmin4

Tarayıcıda: http://127.0.0.1:5050

İpucu

İlk kullanıcıyı oluştururken basit bir test e-posta ve şifre kullanabilirsiniz, sonra dilediğiniz gibi değiştirebilirsiniz.


⚙️ 4. Otomasyon Script’i

Manuel çalıştırmayı kolaylaştırmak için:

Bash
nano ~/bin/pgadmin-start.sh

İçerik:

Bash
#!/bin/bash
source ~/pgadmin-env/bin/activate
pgadmin4
Bash
chmod +x ~/bin/pgadmin-start.sh
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
echo "alias pgadmin='~/bin/pgadmin-start.sh'" >> ~/.bashrc
source ~/.bashrc
İpucu

💡 Alias isimlerini kısa ve akılda kalıcı seçmek işleri kolaylaştırır. Örneğin pgadmin.


🔗 5. pgAdmin4 ile PostgreSQL’e Bağlantı

Sunucu eklemek için:

Alan Değer
Name CRM Database
Host localhost
Port 5432
Maintenance DB postgres
Username crm_user
Password crm_sifresi

Bağlantı sorunları için:

Bash
systemctl status postgresql
Bash
sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload

❌ 6. Sık Karşılaşılan Hatalar

Önemli

Her zaman önce servisin çalıştığından emin olun. Çoğu bağlantı hatası buradan kaynaklanır.

Hata 1: No module named ‘pgadmin4.main

  • Çözüm: Sanal ortamı silip yeniden kurun.

Hata 2: FATAL: database “crm_db” does not exist

  • Çözüm: Veritabanını yeniden oluşturun:
Bash
sudo -u postgres createdb crm_db

💡 7. İpuçları ve Öneriler

  • work_mem ve maintenance_work_mem değerlerini artırarak performansı iyileştirin.
  • SSD kullanımı disk I/O’yu hızlandırır.
  • Haftalık yedekleme için cron job kullanabilirsiniz.
  • Üretim ortamında şifreleme yöntemlerini güncel tutun.

🔄 8. PostgreSQL Sürüm Yükseltmeleri

PostgreSQL’i yeni bir sürüme yükseltmek bazen gerekli olabilir. Arch Linux’ta rolling release yapısı sayesinde paketler genellikle güncel gelir, ancak veritabanınızı manuel olarak yükseltmeniz gerekebilir.

İpucu

pg_upgrade aracı kullanılabilir, ancak bazı kullanıcılar için karmaşık olabilir. Daha güvenli ve basit bir yöntem, veritabanınızı pg_dump ile yedekleyip yeni sürümde pg_restore ile geri yüklemektir.

Örnek:

Bash
# Veritabanını yedekleme
sudo -u postgres pg_dump crm_db > crm_db_backup.sql

# Yeni sürümde geri yükleme
sudo -u postgres createdb crm_db
sudo -u postgres psql crm_db < crm_db_backup.sql

Bu yöntem, olası uyumsuzluk sorunlarını önlemeye yardımcı olur.


📦 9. phpPgAdmin Kurulumu (Opsiyonel)

Bazı kullanıcılar pgAdmin4 yerine phpPgAdmin kullanmayı tercih edebilir. phpPgAdmin, web tabanlı bir arayüzdür ve çalışabilmesi için PHP’nin pgsql uzantısı etkin olmalıdır.

İpucu

Apache web sunucusu ve PHP kurulumu yaparken php-pgsql paketinin yüklü ve etkin olduğundan emin olun.

Kurulum örneği:

Bash
sudo pacman -S php-apache php-pgsql phppgadmin
sudo systemctl enable --now httpd

Apache konfigürasyonunu yaptıktan sonra tarayıcınızdan phpPgAdmin’e erişebilirsiniz.


🧹 10. Veri Yedekleme ve Geri Yükleme

Veri güvenliği için yedekleme şarttır. Makalemizde daha önce cron job ile otomatik yedekleme örneği verdik. Şimdi geri yükleme örneğini de ekleyelim.

✅ Yedek Alma

Bash
sudo -u postgres pg_dump crm_db > ~/backups/crm_db_$(date +%F).sql

✅ Yedekten Geri Yükleme

Bash
sudo -u postgres createdb crm_db_restore
sudo -u postgres psql crm_db_restore < ~/backups/crm_db_2025-08-15.sql
İpucu

Farklı ortamlar için ayrı veritabanı isimleri kullanmak (ör. crm_db_dev, crm_db_prod) karışıklığı önler.


🎯 Sonuç

Artık Arch Linux’ta PostgreSQL ve pgAdmin4’ü kurmayı, yapılandırmayı ve yönetmeyi öğrendiniz. Kod örnekleri, ipuçları ve adım adım rehber ile veritabanı projelerinizi güvenle yönetebilirsiniz. 💻

Bilgi

Herhangi bir sorunuz olursa yorum bırakın; memnuniyetle yardımcı olurum! 😊

Arch Linux PostgreSQL pgAdmin4 Kurulumu

Fediverse Yorumları

Mastodon'da Görüntüle