Ulaşım
- Adres:2342 Sk, İpekyol, İpek Ap 49A, 63250 Haliliye/Şanlıurfa
- Telefon:
0542 315 45 37 - eMail: info@alestaweb.com
PostgreSQL 17, Eylül 2024'te yayınlandı ve ciddi yenilikler getirdi: JSON_TABLE() ile JSON verisini SQL tablosuna dönüştürmek artık çok kolay, Vacuum 20x daha az bellek tüketiyor, WAL yazma hızı %200 arttı. Alesta Web ekibi olarak bu rehberde PostgreSQL 17'yi Ubuntu 24.04'e adım adım nasıl kuracağınızı, pg_hba.conf'u nasıl yapılandıracağınızı ve PostgreSQL 16'dan nasıl yükselteceğinizi kapsamlı biçimde anlattık. Hadi başlayalım!
PostgreSQL 17, hem performans hem SQL özellik açısından önemli adımlar attı. Alesta Web olarak öne çıkan yenilikleri şöyle sıralıyoruz:
| Yenilik / Feature | Etki / Impact |
|---|---|
| JSON_TABLE() | JSON verisini SQL tablo formatına dönüştür |
| MERGE + RETURNING | MERGE komutuna RETURNING cümlesi eklendi |
| Vacuum Bellek | 20x daha az bellek tüketimi |
| WAL Yazma | Yüksek concurrency'de %200 daha iyi throughput |
| COPY Komutu | Büyük satırlarda 2x performans |
| MERGE/SPLIT PARTITIONS | Partition bölme ve birleştirme komutları |
| Artımlı Backup | Incremental filesystem backup desteği |
Alesta Web ekibi olarak Ubuntu'nun varsayılan deposu yerine PostgreSQL'in resmi deposunu kullanmanızı öneriyoruz. Bu sayede her zaman en güncel sürümü alırsınız.
sudo apt update sudo apt upgrade -y
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc \ --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \ https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \ > /etc/apt/sources.list.d/pgdg.list'
sudo apt update sudo apt -y install postgresql-17 postgresql-client-17
# Servisi başlat sudo systemctl start postgresql # Sistem başlangıcında otomatik çalışmasını sağla sudo systemctl enable postgresql # Durumu kontrol et sudo systemctl status postgresql
sudo -u postgres psql --version # Çıktı: psql (PostgreSQL) 17.x # PostgreSQL konsoluna gir sudo -u postgres psql # Çıktı: psql (17.x) ... # postgres=#
PostgreSQL 17 başarıyla kuruldu. Şimdi ilk yapılandırma adımlarına geçelim.
sudo -u postgres psql -- Güçlü bir şifre belirle ALTER USER postgres PASSWORD 'GüçlüŞifre2026!'; -- Çık \q
sudo -u postgres psql -- Yeni kullanıcı oluştur CREATE ROLE app_kullanici WITH LOGIN PASSWORD 'AppŞifre2026!'; -- Yeni veritabanı oluştur CREATE DATABASE app_db OWNER app_kullanici; -- Bağlantı izni GRANT CONNECT ON DATABASE app_db TO app_kullanici; -- Schema izinleri GRANT USAGE ON SCHEMA public TO app_kullanici; GRANT CREATE ON SCHEMA public TO app_kullanici; -- Tüm tablo izinleri GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app_kullanici; -- Yeni tablolar için varsayılan izinler ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO app_kullanici; \q
Production ortamında süper kullanıcı (superuser) yerine uygulama bazlı kullanıcılar oluşturun. Her uygulamanın sadece kendi veritabanına erişimi olsun. Bu, güvenlik ihlali durumunda zararı sınırlar (principle of least privilege).
pg_hba.conf dosyası, PostgreSQL'in "güvenlik duvarı" gibi çalışır. Kim, nereden, hangi yöntemle bağlanabilir — hepsini bu dosya belirler.
sudo -u postgres psql -c "SHOW hba_file;" # Çıktı: /etc/postgresql/17/main/pg_hba.conf # Dosyayı düzenle sudo nano /etc/postgresql/17/main/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD # Yerel Unix socket bağlantıları local all all scram-sha-256 # Localhost TCP/IP bağlantıları host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256 # Uzak bağlantılar (opsiyonel - sadece gerekirse) # host all all 192.168.1.0/24 scram-sha-256
sudo systemctl reload postgresql
scram-sha-256, MD5'ten çok daha güvenli. PostgreSQL 17'de varsayılan authentication yöntemi olarak kullanılıyor. Eski MD5 yöntemini kullanmaya devam ediyorsanız, scram-sha-256'ya geçmenizi strongly recommend ediyoruz (strongly recommend migrating to scram-sha-256).
# postgresql.conf'u düzenle sudo nano /etc/postgresql/17/main/postgresql.conf # Şu satırı bul ve değiştir: listen_addresses = '*' # Tüm arayüzlerden dinle # veya listen_addresses = 'localhost,192.168.1.10' # Belirli IP'ler # Reload et sudo systemctl reload postgresql
Alesta Web olarak pg_upgrade yöntemini öneriyoruz. Disk alanı tasarrufu yapan --link parametresiyle dakikalar içinde tamamlanır.
sudo apt update sudo apt install postgresql-17 postgresql-contrib-17
sudo systemctl stop postgresql
sudo -u postgres /usr/lib/postgresql/17/bin/pg_upgrade \ --old-datadir=/var/lib/postgresql/16/main \ --new-datadir=/var/lib/postgresql/17/main \ --old-bindir=/usr/lib/postgresql/16/bin \ --new-bindir=/usr/lib/postgresql/17/bin \ --link # --link parametresi: hard link kullanır = hızlı + disk tasarrufu
sudo -u postgres ./analyze_new_cluster.sh
sudo systemctl start postgresql@17-main # Doğrula sudo -u postgres psql -c "SELECT version();"
pg_upgrade öncesinde mutlaka yedek alın (always backup before pg_upgrade)! pg_dumpall > backup.sql komutu tüm veritabanlarını yedekler. Upgrade sonrası eski veri silmeden önce her şeyin çalıştığını doğrulayın.
-- JSON array'ini SQL tablosuna dönüştür
SELECT * FROM JSON_TABLE(
'[
{"id": 1, "isim": "Ali", "yas": 30},
{"id": 2, "isim": "Ayşe", "yas": 25},
{"id": 3, "isim": "Mehmet", "yas": 35}
]'::json,
'$[*]'
COLUMNS (
id INT PATH '$.id',
isim TEXT PATH '$.isim',
yas INT PATH '$.yas'
)
) AS jt;
-- Sonuç:
-- id | isim | yas
-- 1 | Ali | 30
-- 2 | Ayşe | 25
-- 3 | Mehmet | 35
MERGE INTO kullanicilar k USING (VALUES (101, 'Zeki', 'zeki@ornek.com'), (102, 'Derya', 'derya@ornek.com') ) AS yeni(id, isim, eposta) ON k.id = yeni.id WHEN MATCHED THEN UPDATE SET isim = yeni.isim, eposta = yeni.eposta WHEN NOT MATCHED THEN INSERT (id, isim, eposta) VALUES (yeni.id, yeni.isim, yeni.eposta) RETURNING id, isim, 'eklendi_veya_guncellendi' AS islem; -- Etkilenen tüm satırları döndürür (returns all affected rows)
-- Sorgunun bellek kullanımını analiz et EXPLAIN (ANALYZE, MEMORY) SELECT * FROM buyuk_tablo WHERE kosul = true; -- Çıktı örneği: -- Planning Memory: 128 kB -- Execution Memory: 2048 kB
-- İki partition'ı birleştir ALTER TABLE satis_verisi MERGE PARTITIONS (satis_2024_01, satis_2024_02) INTO PARTITION satis_2024_q1;
Alesta Web olarak tüm komutları Ubuntu 24.04 üzerinde test ettik (all commands tested on Ubuntu 24.04).
PostgreSQL 17'yi Ubuntu 24.04'e kurdunuz, yapılandırdınız ve yeni özelliklerini öğrendiniz. Alesta Web ekibi olarak en çok JSON_TABLE() ve Vacuum iyileştirmelerini beğendik — özellikle JSON-heavy uygulamalarda gerçek fark yaratıyor.
Hızlı Özet / Quick Summary:
Faydalı Linkler / Useful Links:
© 2026 AlestaWeb - Tüm hakları saklıdır.