İÇİNDEKİLER
- •PostgreSQL 14 için yükseltme planınızı birlikte çıkaralım
- •Kısaca: PostgreSQL 14 Destek Sonu
- •Destek Sonu İşletmeniz İçin Ne Anlama Geliyor?
- •Önce Envanter: Hangi Sürümü Kullanıyorsunuz?
- •Hedef Sürüm: PostgreSQL 17 mi, 18 mi?
- •Hangi Yükseltme Yöntemi Size Uygun?
- •Azure ve Amazon RDS Kullanıyorsanız
- •Yükseltme Öncesi Kontrol Listesi
- •Yöntem 1: pg_upgrade ile 14’ten 18’e
- •1. Yeni kümeyi oluşturun
- •2. Uyumluluk kontrolünü çalıştırın
- •3. PostgreSQL 14’ü durdurun ve yükseltin
- •4. PostgreSQL 18’i başlatın ve işlemi tamamlayın
- •Yöntem 2: Logical Replication ile Kesintisiz Geçiş
- •1. PostgreSQL 14’te publication oluşturun
- •2. Rolleri ve şemayı PostgreSQL 18’e kopyalayın
- •3. PostgreSQL 18’de subscription oluşturun
- •4. Geçişi yapın
- •Yöntem 3: pg_dump ve pg_restore
- •Collation, glibc ve REINDEX
- •Geri Dönüş Planı
- •Yükseltme Sonrası Kontroller
- •Ne Zaman Uzman Desteği Almalısınız?
- •Sıkça Sorulan Sorular
- •Kaynaklar
- •Destek bitmeden PostgreSQL 14’ten çıkın
PostgreSQL 14’ün topluluk desteği 12 Kasım 2026’da sona eriyor. Sunucularınız bu tarihten sonra da çalışır; ancak yeni bulunan güvenlik açıkları ve hatalar artık PostgreSQL 14 için kapatılmaz. Yükseltmeyi şimdi planlamanızı, hedef sürüm olarak da PostgreSQL 18’i seçmenizi öneriyoruz.
Bu rehber iki okuyucu için hazırlandı: kararı verecek BT yöneticileri ve yükseltmeyi uygulayacak teknik ekipler. İlk bölümler destek sonunun işletmeye etkisini, hedef sürüm seçimini ve yöntem karşılaştırmasını özetliyor. Sonraki bölümler ise pg_upgrade, logical replication ve dump/restore için test edilmiş adımları içeriyor. Komutları PostgreSQL 14.24 ve 18.6 üzerinde denedik.
PostgreSQL 14 için yükseltme planınızı birlikte çıkaralım
Aryasoft, PostgreSQL 14 sunucularınızı eklentiler, collation, replikasyon ve kesinti süresi açısından değerlendirir; hedef sürümü, yükseltme yöntemini ve geri dönüş planını sizinle birlikte belirler.
Kısaca: PostgreSQL 14 Destek Sonu
| Konu | Özet |
|---|---|
| Destek sonu | 12 Kasım 2026. Bu tarihte yayımlanacak 14.x ara sürümü, PostgreSQL 14 için son güncelleme olacak. |
| Sonrasında ne olur? | Sunucular çalışmaya devam eder, ancak güvenlik ve hata düzeltmesi yayımlanmaz. |
| Önerilen hedef | PostgreSQL 18 (Kasım 2030’a kadar destekleniyor). Eklenti veya uygulama kısıtı varsa PostgreSQL 17. |
| Ara sürüm gerekir mi? | Hayır. 14’ten doğrudan 17’ye veya 18’e geçilebilir. |
| En hızlı yöntem | Aynı sunucuda pg_upgrade --link |
| En kısa kesinti | Logical replication ile yeni sunucuya geçiş (geçiş anında birkaç dakika) |
| Azure ve AWS | Ücretli uzatılmış destek var: Azure’da 1 Şubat 2027’den itibaren, Amazon RDS’te 28 Şubat 2027’den itibaren. |
Destek Sonu İşletmeniz İçin Ne Anlama Geliyor?
PostgreSQL topluluğu her ana sürümü (major version), ilk yayın tarihinden itibaren beş yıl boyunca destekler. 30 Eylül 2021’de yayımlanan PostgreSQL 14 için bu süre, 12 Kasım 2026’da çıkacak son ara sürümle (minor release) tamamlanıyor.
Destek sonu bir kapanış tarihi değildir; 13 Kasım sabahı hiçbir sunucu durmayacak. Değişen, sürümün bakım durumudur:
| Alan | 12 Kasım 2026’dan sonra |
|---|---|
| Sunucunun çalışması | Etkilenmez. |
| Güvenlik açıkları | Yeni bulunan açıklar 15, 16, 17 ve 18’de kapatılır; 14’te kapatılmaz. |
| Hata düzeltmeleri | Veri bozulmasına yol açabilecek hatalar dahil, 14 için düzeltme yayımlanmaz. |
| Eklenti ve sürücüler | Üreticiler, desteklenmeyen sürümleri zamanla yeni sürümlerinden çıkarır. |
| Denetim ve uyum | Desteklenmeyen yazılım, bilgi güvenliği denetimlerinde bulgu olarak raporlanır. |
| Bulut servisleri | Azure ve Amazon RDS, ek ücretli uzatılmış destek dönemine geçer. |
Kısacası, PostgreSQL 14’te geçen her ay, yamayla kapatamayacağınız bir risk biriktirir. Yükseltme ne kadar erken planlanırsa, proje o kadar sakin yürür.
Önce Envanter: Hangi Sürümü Kullanıyorsunuz?
Her sunucuda aşağıdaki iki komutu çalıştırın. Script’lerde karşılaştırma yapacaksanız server_version_num daha kullanışlıdır: örneğin 140024, 14.24 anlamına gelir.
SELECT version();
SHOW server_version_num;
14.24’ten eski bir 14.x sürümü kullanıyorsanız, önce son ara sürüme geçin. Ara sürüm güncellemesi dump veya pg_upgrade gerektirmez; ana sürüm yükseltmesine bilinen hatalardan arınmış bir sistemle başlamanızı sağlar.
Hedef Sürüm: PostgreSQL 17 mi, 18 mi?
Her iki sürüme de 14’ten doğrudan geçebilirsiniz; 15 ve 16 üzerinden ara adım atmanız gerekmez. Karar için öne çıkan farklar şunlar:
| PostgreSQL 17 | PostgreSQL 18 | |
|---|---|---|
| İlk yayın | 26 Eylül 2024 | 25 Eylül 2025 |
| Topluluk desteği | 8 Kasım 2029’a kadar | 14 Kasım 2030’a kadar |
| Güncel ara sürüm (Ekim 2026) | 17.11 | 18.6 |
| pg_upgrade ve istatistikler | Optimizer istatistikleri taşınmaz; canlı yükten önce ANALYZE gerekir. | İstatistiklerin çoğu taşınır. Yalnızca genişletilmiş istatistikler (CREATE STATISTICS) yeniden oluşturulur. |
| pg_upgrade modları | –link, –clone, –copy, –copy-file-range | Bunlara ek olarak –swap, –no-statistics ve paralel kontroller (–jobs) |
| Dikkat edilecek varsayılanlar | Bakım işlemleri güvenli bir search_path ile çalışır. | Data checksum varsayılan olarak açık, MD5 parola desteği kaldırılma sürecinde, asenkron I/O (io_method). |
Önerimiz PostgreSQL 18. Bir yıl daha uzun destek alır ve istatistikler taşındığı için yükseltme sonrasında sistem daha hızlı normal performansına döner. Kullandığınız bir eklenti, uygulama üreticiniz veya bulut sağlayıcınız 18’i henüz desteklemiyorsa PostgreSQL 17 güvenli bir alternatiftir.
PostgreSQL 19’u beklemek için bir neden görmüyoruz. İlk sürüm adayı (RC1) 15 Ekim 2026’da yayımlandı ve genel kullanıma sunulması 19 Kasım 2026 için planlanıyor. Eklentilerin, sürücülerin ve araçların yeni bir ana sürümü desteklemesi ise genellikle birkaç ay sürer.
Hangi hedefi seçerseniz seçin, atladığınız her sürümün sürüm notlarındaki “Migration to Version” bölümünü okuyun. 14’ten gelen uygulamaları en sık şaşırtan değişiklik PostgreSQL 15’tedir: yeni veritabanlarında PUBLIC rolü, public şemasında artık nesne oluşturamaz. Yükseltilen veritabanları mevcut yetkilerini korur; fark, yükseltmeden sonra oluşturduğunuz veritabanlarında ortaya çıkar.
Hangi Yükseltme Yöntemi Size Uygun?
Doğru yöntemi üç soru belirler: Ne kadar kesinti kabul edilebilir? Ek disk veya yeni sunucu var mı? İşler ters giderse nasıl geri dönülecek?
| Yöntem | Kesinti | Ek kaynak | Geri dönüş | En uygun olduğu durum |
|---|---|---|---|---|
| pg_upgrade –link | Kısa; veri dosyaları kopyalanmaz | Çok az (aynı dosya sistemi gerekir) | Yeni küme başlatıldıktan sonra yalnızca yedekten | Aynı sunucuda kalacak, test edilmiş yedeği olan büyük veritabanları |
| pg_upgrade –clone | Kısa, link moduna yakın | Yalnızca değişen bloklar kadar | Eski küme kullanılabilir kalır | Reflink destekli dosya sistemleri (Btrfs, reflink’li XFS) |
| pg_upgrade –copy | Veri boyutuyla birlikte uzar | Verinin tam bir kopyası | Eski kümeye dokunulmaz | Yeterli boş diski olan küçük ve orta ölçekli veritabanları |
| pg_dump / pg_restore | En uzun; işlem süresince yazma durdurulur | Dump dosyası ve yeni küme | Kaynak sistem olduğu gibi kalır | Küçük veritabanları, yeni donanım veya işletim sistemi |
| Logical replication | Yalnızca geçiş anında, birkaç dakika | İkinci bir sunucu | Eski sunucu, siz kapatana kadar çalışır | Kesintiye çok az tahammülü olan sistemler, yeni donanım veya buluta taşıma |
| Bulut servisinin yükseltmesi | İşlem süresince erişim yok | Sağlayıcı yönetir | Snapshot veya servis yedeği | Azure Database for PostgreSQL ve Amazon RDS |
Pratikte seçim çoğunlukla şöyle sonuçlanır:
- Aynı sunucuda kalacaksanız ve birkaç dakikalık ila bir saatlik bir kesinti kabul edilebiliyorsa: pg_upgrade.
- Kesinti dakikalarla sınırlıysa ya da yükseltmeyi yeni donanıma geçişle birleştiriyorsanız: logical replication.
- Veritabanı küçükse ve bu fırsatı bir temizlik projesine dönüştürmek istiyorsanız: dump/restore.
PostgreSQL 18 ayrıca --swap modunu getiriyor. Bu mod, eski veri dizinlerini yeni kümeye taşır ve çok sayıda tablo ve indeks barındıran kümelerde en hızlı seçenek olabilir. Link modunda olduğu gibi, dosya aktarımı başladıktan sonra eski kümeyi başlatmak güvenli değildir.
Azure ve Amazon RDS Kullanıyorsanız
Yönetilen servislerde yükseltmeyi sağlayıcı yürütür, ancak takvim ve maliyet sizin sorumluluğunuzdadır.
| Azure Database for PostgreSQL (flexible server) | Amazon RDS for PostgreSQL | |
|---|---|---|
| Yükseltme yöntemi | pg_upgrade tabanlı yerinde yükseltme; ara sürümleri atlayabilir | Ana sürüm yükseltmesini siz başlatırsınız |
| Uzatılmış destek | 1 Şubat 2027 – 11 Kasım 2029 | Standart destek 28 Şubat 2027’de biter; uzatılmış destek 28 Şubat 2030’a kadar sürer |
| Ücret | Ek ücretli; desteklenmeyen sürümdeki sunucular otomatik olarak kapsama alınır | Ek ücretli; Multi-AZ standby instance’ları da ücretlendirilir |
| Dikkat | Read replica’lar yükseltmeden önce silinip sonra yeniden oluşturulmalı; işlem sonrası ANALYZE gerekir | Eklentilerin çoğu motorla birlikte yükseltilmez; ayrıca planlanmalı |
Azure, yükseltmeden önce bir ön kontrol çalıştırır ve başarısızlık durumunda geri dönmek için örtük bir yedek alır. Amazon RDS ise PostgreSQL 14.24 için 17.11 ve 18.6’yı doğrudan hedef olarak listeliyor.
Not
Uzatılmış destek sorunu çözmez, yalnızca zaman kazandırır. Hem Azure’da hem AWS’de ek ücretlidir ve belirli bir tarihte sona erer. Bu dönemi yükseltmeyi ertelemek için değil, planlı bir yükseltmeyi rahat tamamlamak için kullanın.
Yükseltme Öncesi Kontrol Listesi
| Kontrol | Neden önemli? |
|---|---|
| Envanter | Sunucuları, veritabanlarını, boyutları, collation’ları, eklentileri ve replication slot’ları listeleyin. Planın tamamı bu listeye dayanır. |
| Eklentiler | Kullandığınız her eklentinin hedef sürüm ve platform için mevcut olduğunu doğrulayın. Azure’da bazı eklentiler yerinde yükseltmeyi engelleyebilir. |
| pg_upgrade –check | Çalışan 14 sunucusunda hiçbir şeyi değiştirmeden engelleri raporlar: reg* tipli kolonlar, prepared transaction’lar, eksik kütüphaneler. |
| Collation ve işletim sistemi | Yükseltme sizi yeni bir glibc sürümüne de taşıyorsa metin indekslerinin yeniden oluşturulması gerekir. |
| Kimlik doğrulama | Hâlâ MD5 parola kullanan rolleri tespit edin; PostgreSQL 18 bu yöntemi kaldırma sürecine aldı. |
| Yedek | Tam yedek alın ve geri yüklenebildiğini kanıtlayın. Link ve swap modlarında tek geri dönüş yolunuz budur. |
| Prova | Production (üretim ortamı) verisini bir test sunucusuna yükleyin, yükseltmeyi baştan sona uygulayın, süresini ölçün ve uygulama testlerini çalıştırın. |
Aşağıdaki sorgular envanterin temelini çıkarır. Eklenti sorgusunu her veritabanında ayrı ayrı çalıştırın.
-- Databases, size and collation
SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size, datcollate
FROM pg_database WHERE datallowconn ORDER BY pg_database_size(datname) DESC;
-- Installed extensions (run in every database)
SELECT extname, extversion FROM pg_extension ORDER BY extname;
-- Items pg_upgrade or a cutover cares about
SELECT count(*) AS prepared_xacts FROM pg_prepared_xacts;
SELECT slot_name, slot_type, active FROM pg_replication_slots;
SHOW data_checksums;
-- Roles still using MD5 password hashes
SELECT rolname FROM pg_authid WHERE rolpassword LIKE 'md5%';
-- Tables without a primary key (matter for logical replication)
SELECT c.oid::regclass AS table_without_pk
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE i.indrelid = c.oid AND i.indisprimary);
Yöntem 1: pg_upgrade ile 14’ten 18’e
Örnekler, apt.postgresql.org’un Debian ve Ubuntu paket yapısına göre yazıldı; bu yapıda her sürümün programları /usr/lib/postgresql/<sürüm>/bin altında bulunur. PostgreSQL 18 paketlerini 14’ün yanına kurun ve tüm komutları postgres kullanıcısıyla, bu kullanıcının yazabildiği bir dizinden çalıştırın.
1. Yeni kümeyi oluşturun
Yeni kümenin locale ve encoding ayarları eski kümeyle aynı olmalıdır. Bir ayrıntıya dikkat edin: PostgreSQL 18, data checksum’ı varsayılan olarak açar; pg_upgrade ise iki kümede bu ayarın aynı olmasını şart koşar. Varsayılan ayarlarla kurulmuş bir 14 kümesinde checksum kapalı olduğu için --no-data-checksums parametresini kullanın. Aksi halde kontrol, “old cluster does not use data checksums but the new one does” hatasıyla durur.
OLD=/usr/lib/postgresql/14/bin
NEW=/usr/lib/postgresql/18/bin
cd /var/lib/postgresql/upg
$NEW/initdb -D ../pg18 -U postgres --locale=en_US.UTF-8 -E UTF8 --no-data-checksums
2. Uyumluluk kontrolünü çalıştırın
Kontrol, PostgreSQL 14 çalışırken yapılabilir. Gerçek yükseltmede kullanacağınız modu (--link gibi) burada da belirtin.
$NEW/pg_upgrade -b $OLD -B $NEW -d ../pg14 -D ../pg18 -p 5414 -P 5418 --check --link
Testimizde ilk kontrol, “Checking for reg* data types in user tables” adımında durdu ve sorunlu kolonu pg_upgrade_output.d altındaki tables_using_reg.txt dosyasına yazdı. Bu veri tipleri, pg_upgrade’in koruyamadığı sistem kimliklerini (OID) saklar. Kolonu 14 sunucusunda text tipine çevirdikten sonra kontrol “Clusters are compatible” sonucuyla tamamlandı.
3. PostgreSQL 14’ü durdurun ve yükseltin
$OLD/pg_ctl -D ../pg14 -w stop -m fast
$NEW/pg_upgrade -b $OLD -B $NEW -d ../pg14 -D ../pg18 -p 5414 -P 5418 --link --jobs 2
İşlem “Upgrade Complete” mesajıyla biter. Eklentilerin yeni sürümleri varsa pg_upgrade bir update_extensions.sql dosyası ve eski kümeyi silmek için delete_old_cluster.sh script’i oluşturur. Yeni küme tüm kontrollerden geçmeden ve yeni bir yedek alınmadan bu script’i çalıştırmayın.
Uyarı
Link modunda eski ve yeni küme aynı veri dosyalarını kullanır. PostgreSQL 18 bir kez başlatıldıktan sonra 14 kümesine güvenle dönülemez; tek geri dönüş yolu yedekten geri yüklemedir. Bu nedenle yedeği 3. adımdan önce alın ve geri yüklenebildiğini doğrulayın.
4. PostgreSQL 18’i başlatın ve işlemi tamamlayın
pg_upgrade yapılandırma dosyalarını taşımaz. Uygulamaları yeni kümeye yönlendirmeden önce pg_hba.conf dosyasını ve gerekli postgresql.conf ayarlarını aktarın. Ardından sunucuyu başlatın, eklentileri güncelleyin ve eksik istatistikleri oluşturun:
$NEW/pg_ctl -D ../pg18 -o "-p 5432" -l ../pg18.log -w start
psql -U postgres -f update_extensions.sql
$NEW/vacuumdb -U postgres --all --analyze-in-stages --missing-stats-only
$NEW/vacuumdb -U postgres --all --analyze-only --jobs 2
Testimizde PostgreSQL 18, henüz hiç ANALYZE çalıştırılmadan tablonun istatistiklerine sahipti; oluşturulan script de pgcrypto eklentisini 1.3’ten 1.4’e güncelledi. Küme, 14’teki gibi data_checksums = off olarak kaldı.
Streaming replication ile çalışan standby sunucularınız varsa, pg_upgrade dokümantasyonu bunların birincil sunucudan sonra rsync ile nasıl yükseltileceğini adım adım anlatır. Bu bölümü özellikle dikkatli planlayın: buradaki bir hata, standby sunucuları sıfırdan kurmanız anlamına gelir.
Yöntem 2: Logical Replication ile Kesintisiz Geçiş
Logical replication, veriyi yeni bir PostgreSQL 18 sunucusuna kopyalar ve geçiş anına kadar değişiklikleri aktarmaya devam eder. Eski sunucu süreç boyunca çalıştığı için kesinti yalnızca geçiş anıyla sınırlı kalır.
Başlamadan önce 14 sunucusunda wal_level = logical ayarını yapın (yeniden başlatma gerektirir) ve replikasyon kullanıcısına pg_hba.conf üzerinden erişim izni verin.
1. PostgreSQL 14’te publication oluşturun
CREATE ROLE repl_user WITH LOGIN REPLICATION PASSWORD 'change_me';
GRANT SELECT ON orders TO repl_user;
CREATE PUBLICATION upgrade_pub FOR TABLE orders;
Publication’a eklenen her tablonun, UPDATE ve DELETE işlemlerini aktarabilmek için bir replica identity’ye ihtiyacı vardır. Primary key’i olmayan tablolar, kaynak sunucuda “cannot update table … because it does not have a replica identity and publishes updates” hatası verir. Bu tablolara primary key ekleyin; mümkün değilse son çare olarak ALTER TABLE ... REPLICA IDENTITY FULL kullanın.
2. Rolleri ve şemayı PostgreSQL 18’e kopyalayın
Logical replication tablo yapısını ve DDL komutlarını aktarmaz; bunları önceden taşımanız gerekir. PostgreSQL 18’in istemci araçlarını 14 sunucusuna karşı çalıştırın ve pg14-host yerine kendi sunucu adınızı yazın.
pg_dumpall -h pg14-host -U postgres --globals-only -f globals.sql
psql -U postgres -f globals.sql
pg_dump -h pg14-host -U postgres -d shop --schema-only --no-publications -f shop_schema.sql
psql -U postgres -d shop -v ON_ERROR_STOP=1 -f shop_schema.sql
Rolleri yüklerken “role “postgres” already exists” hatası normaldir. Bunun dışındaki her hatayı inceleyin.
3. PostgreSQL 18’de subscription oluşturun
CREATE SUBSCRIPTION upgrade_sub
CONNECTION 'host=pg14-host port=5432 dbname=shop user=repl_user password=change_me'
PUBLICATION upgrade_pub;
-- 'r' means the initial copy is done and the table is streaming
SELECT srrelid::regclass AS table_name, srsubstate FROM pg_subscription_rel;
Subscription, kaynak sunucuda bir replication slot açar. Slot var olduğu sürece 14 sunucusu işlem günlüğünü (WAL) silmez, bu slot için saklamaya devam eder. Senkronizasyon süresince eski sunucunun disk alanını izleyin.
4. Geçişi yapın
PostgreSQL 14’te uygulamanın yazma işlemlerini durdurun ve yeni sunucunun tüm değişiklikleri aldığını doğrulayın:
-- On PostgreSQL 14: lag_bytes must be 0
SELECT application_name, state,
pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS lag_bytes
FROM pg_stat_replication;
Ardından PostgreSQL 18’de üç işlem kalır: senkronizasyon sırasında değişen DDL’leri uygulamak, sequence değerlerini ileri almak ve subscription’ı kaldırmak. DROP SUBSCRIPTION, kaynak sunucudaki slot’u da siler.
ALTER TABLE orders ADD COLUMN note text; -- DDL that was added on 14 during the sync
SELECT setval('orders_id_seq', (SELECT max(id) FROM orders));
DROP SUBSCRIPTION upgrade_sub;
İpucu
Sequence değerleri logical replication ile aktarılmaz. Testimizde 1.000 satır aktarıldıktan sonra yeni sunucudaki sequence hâlâ 1’deydi ve ilk INSERT “duplicate key” hatası verdi. Uygulamayı yeni sunucuya yönlendirmeden önce tüm sequence’ler için setval adımını geçiş script’inize ekleyin.
Son olarak 14 sunucusunda SELECT count(*) FROM pg_replication_slots; sorgusunun 0 döndürdüğünü kontrol edin. Unutulan bir slot, eski sunucunun diski dolana kadar WAL biriktirmeye devam eder.
Yöntem 3: pg_dump ve pg_restore
En basit yöntemdir ve tüm indeksleri yeni sunucuda baştan oluşturur. Veritabanını bakım için ayrılan süre içinde yedekleyip geri yükleyebiliyorsanız iyi bir seçenektir. PostgreSQL dokümantasyonu, yeni sürümün pg_dump ve pg_dumpall araçlarının kullanılmasını önerir.
pg_dumpall -h pg14-host -U postgres --globals-only -f globals.sql
pg_dump -h pg14-host -U postgres -d shop -Fc -f shop.dump
createdb -U postgres shop_restored
pg_restore -U postgres -d shop_restored --jobs 2 --no-publications --no-subscriptions shop.dump
Custom format (-Fc), --jobs ile paralel geri yüklemeye olanak tanır. Logical replication’dan farklı olarak dump, sequence değerlerini de taşır. Geri yüklenen veritabanında optimizer istatistikleri bulunmadığı için işlemden sonra ANALYZE çalıştırın.
Collation, glibc ve REINDEX
Metin kolonlarındaki indeksler, işletim sisteminin sıralama kurallarına (glibc collation) bağlıdır. Yükseltmeyle birlikte daha yeni bir işletim sistemi sürümüne de geçiyorsanız, bu indeksleri canlıya almadan önce yeniden oluşturun. Bu tür değişikliğin en bilinen örneği glibc 2.28’dir.
Her yöntem bu riskten aynı ölçüde etkilenmez:
- pg_upgrade indeksleri olduğu gibi taşıdığı için etkilenir.
- Dump/restore ve logical replication indeksleri yeni sunucuda baştan oluşturduğu için etkilenmez.
- ICU collation kullanan kolonlar glibc değişikliklerinden etkilenmez.
PostgreSQL 15 ve sonrası her veritabanının collation sürümünü kaydeder. Yeni sunucuda kayıtlı sürümle gerçek sürümü karşılaştırabilir, B-tree indekslerini amcheck ile doğrulayabilir ve gerekli indeksleri yeniden oluşturabilirsiniz:
SELECT datname, datcollate, datcollversion,
pg_database_collation_actual_version(oid) AS actual_version
FROM pg_database WHERE datname = 'satis';
-- Structural check of B-tree indexes
CREATE EXTENSION IF NOT EXISTS amcheck;
SELECT c.relname AS index_name, bt_index_check(c.oid, true) AS ok
FROM pg_index i
JOIN pg_class c ON c.oid = i.indexrelid
JOIN pg_am a ON a.oid = c.relam AND a.amname = 'btree'
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'public';
-- Indexes that depend on a collatable column
SELECT DISTINCT ic.relname AS index_name
FROM pg_index i
JOIN pg_class ic ON ic.oid = i.indexrelid
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY (i.indkey)
JOIN pg_namespace n ON n.oid = ic.relnamespace
WHERE a.attcollation <> 0 AND n.nspname NOT IN ('pg_catalog', 'information_schema');
-- Rebuild without blocking writes, then record the current collation version
REINDEX INDEX CONCURRENTLY musteri_sehir_idx;
ALTER DATABASE satis REFRESH COLLATION VERSION;
Türkçe veriyle çalışanlar için bir test sonucu: tr_TR.UTF-8 locale’iyle oluşturduğumuz veritabanında lower('IŞIK') ve upper('istanbul'), yükseltmeden önce ve sonra aynı şekilde ışık ve İSTANBUL döndürdü; şehir kolonundaki indeks de kullanılmaya devam etti.
Geri Dönüş Planı
Geri dönüş kararının ölçütünü ve yöntemini yükseltmeden önce yazılı olarak belirleyin. Çalışma sırasında, baskı altında verilen kararlar genellikle süreci uzatır.
| Yöntem | Geri dönüş yolu |
|---|---|
| pg_upgrade –copy veya –clone | Eski kümeye dokunulmaz; PostgreSQL 14’ü yeniden başlatmanız yeterlidir. |
| pg_upgrade –link | Yeni küme hiç başlatılmadıysa global/pg_control.old dosyasının adını eski haline getirip 14’ü başlatabilirsiniz. PostgreSQL 18 bir kez başlatıldıysa yedekten geri yükleyin. |
| pg_upgrade –swap | pg_upgrade eski kümenin artık başlatılamayacağını bildirdiyse yedekten geri yükleyin. |
| Logical replication, dump/restore | 14 sunucusu olduğu gibi durur; uygulamayı yeniden ona yönlendirin. Geçişten sonra 18’e yazılan verinin ayrıca aktarılması gerektiğini hesaba katın. |
| Bulut servisi | Hangi snapshot’a döneceğinizi ve sizin veri boyutunuzda geri yüklemenin ne kadar sürdüğünü önceden bilin. |
Yükseltme Sonrası Kontroller
SHOW server_version_num;18 ile başlayan bir değer (18.6 için180006) döndürmeli; kritik tabloların satır sayıları kaynakla tutmalı.pg_available_extensionsgörünümündeinstalled_versioniledefault_versiondeğerlerini karşılaştırın ve geride kalan eklentileri güncelleyin.- İstatistiklerin oluştuğundan emin olun: pg_upgrade sonrasında yukarıdaki vacuumdb komutlarını, dump/restore ve bulut servislerinde ise ANALYZE’ı çalıştırın.
- Varsayılanı değişen ayarları gözden geçirin:
password_encryption,io_methodvedata_checksums. - Uygulama testlerini çalıştırın; ilk iş günü boyunca sunucu loglarını ve yavaş sorguları yakından izleyin.
- PostgreSQL 18 üzerinde yeni bir tam yedek alın ve geri yüklemeyi test edin. 14’te alınmış fiziksel yedekler ve WAL arşivleri PostgreSQL 18 ile geri yüklenemez.
- Geçici kaynakları temizleyin: eski küme dosyaları (yeni yedek alındıktan sonra), replication slot’lar ve geçici roller.
Ne Zaman Uzman Desteği Almalısınız?
Eklentisi olmayan, tek ve küçük bir veritabanının yükseltmesi bir hafta sonu çalışmasıdır. Aşağıdaki durumlardan biri sizin için geçerliyse deneyimli bir ekiple çalışmanızı öneririz:
- Veritabanı büyük ve iş birimleri yalnızca birkaç dakikalık kesintiyi kabul ediyor.
- Streaming replica’lar, Patroni gibi bir yüksek erişilebilirlik yöneticisi veya mevcut bir logical replication yapısı kullanıyorsunuz.
- PostGIS, TimescaleDB gibi eklentiler veya bir uygulama üreticisi hedef sürümü kısıtlıyor.
- Yükseltme; yeni bir işletim sistemi, yeni donanım ya da Azure veya AWS’ye taşınma ile aynı döneme denk geliyor.
- Ekipte bu veritabanlarının geri yüklemesini yakın zamanda deneyen kimse yok.
Aryasoft’un yalnızca kıdemli uzmanlardan oluşan PostgreSQL ekibi, yükseltmeleri uçtan uca planlar ve yürütür: envanter, production kopyası üzerinde prova, geçişin kendisi ve sonrasındaki kontroller. Yükseltme daha kapsamlı bir platform değişikliğinin parçasıysa veritabanı taşıma (migration) hizmetlerimizi inceleyebilirsiniz. Sunucularınız 17 veya 18’e geçtikten sonra düzenli bakım istiyorsanız, uzaktan veritabanı yöneticisi (Remote DBA) hizmetini de içeren yönetilen veritabanı hizmetlerimiz SQL Server’ın yanı sıra PostgreSQL’i de kapsıyor.
Sıkça Sorulan Sorular
Kaynaklar
Bu rehberdeki teknik bilgiler Ekim ve Kasım 2026’da aşağıdaki resmi dokümantasyonla karşılaştırıldı. Tarihler, sürümler ve bulut politikaları değişebilir; planınızı kesinleştirmeden önce ilgili sayfadan teyit edin.
- PostgreSQL: Versioning Policy
- PostgreSQL: Roadmap (ara sürüm takvimi)
- PostgreSQL 18 dokümantasyonu: Upgrading a PostgreSQL Cluster
- PostgreSQL 18 dokümantasyonu: pg_upgrade
- PostgreSQL 18 sürüm notları
- PostgreSQL 17 sürüm notları
- PostgreSQL 15 sürüm notları
- PostgreSQL 18 dokümantasyonu: vacuumdb
- PostgreSQL 18 dokümantasyonu: pg_dump
- PostgreSQL 18 dokümantasyonu: Logical replication restrictions
- PostgreSQL 18 dokümantasyonu: Logical replication configuration settings
- PostgreSQL 18 dokümantasyonu: CREATE SUBSCRIPTION
- PostgreSQL 18 dokümantasyonu: Collation Support
- PostgreSQL Wiki: Locale data changes
- Microsoft Learn: Azure Database for PostgreSQL ana sürüm yükseltmeleri
- Microsoft Learn: Azure Database for PostgreSQL extended support
- Microsoft Learn: Azure Database for PostgreSQL sürüm politikası
- AWS: Amazon RDS for PostgreSQL sürüm takvimleri
- AWS: RDS for PostgreSQL yükseltmesi için ana sürüm seçimi
- AWS: Amazon RDS Extended Support
- AWS: Amazon RDS Extended Support ücretlendirmesi
PostgreSQL Yükseltme
Destek bitmeden PostgreSQL 14’ten çıkın
Aryasoft’un kıdemli PostgreSQL ekibiyle görüşün. Sunucularınızı değerlendirir, yükseltmeyi production kopyası üzerinde prova eder ve geçişi yazılı bir geri dönüş planıyla yürütürüz.