PostgreSQL Migrasyonu: Kesintisiz Yükseltmeler ve Veritabanı Geçişleri İçin Kapsamlı Rehber
- 26 Ağu
- 4 dakikada okunur
Genellikle “dünyanın en gelişmiş açık kaynaklı ilişkisel veritabanı” olarak anılan PostgreSQL, geliştiriciler ve kurumsal yapılar için vazgeçilmez bir güç merkezi haline geldi. Sunduğu sağlam mimari, genişletilebilirlik ve son derece aktif topluluğu, veritabanı migrasyonlarında PostgreSQL’i en popüler hedef noktalarından biri yapıyor. İster mevcut bir PostgreSQL kurulumunuzu yeni bir ana sürüme yükseltiyor (upgrade), ister Oracle veya SQLite gibi farklı bir sistemden geçiş yapıyor olun; iyi planlanmış bir PostgreSQL Migrasyonu başarının anahtarıdır.

Bu kapsamlı rehber, veritabanı geçişlerinizi ve sürüm yükseltmelerinizi sorunsuz bir şekilde tamamlamanız için gereken temel adımları, araçları ve en iyi uygulama yöntemlerini ele almaktadır.
Neden PostgreSQL’e Geçiş Yapmalısınız?
Pek çok organizasyon, büyüyen iş yüklerine ayak uydurabilecek bir veritabanı arayışına girdiğinde bir yol ayrımına gelir. Projelerin ilk aşamalarında SQLite gibi hafif çözümler cazip gelse de, kullanıcı sayısı ve eşzamanlı istekler arttıkça sınırlar hızla görünür hale gelir. Uygulamanızda sık sık “database is locked” hataları görmeye başladıysanız, PostgreSQL’e yelken açma vaktiniz gelmiş demektir.
PostgreSQL’e geçişi cazip kılan temel avantajlar şunlardır:
Yüksek Ölçeklenebilirlik ve Güvenilirlik: Yüksek hacimli ve eşzamanlı işlemler için tasarlanan PostgreSQL, Çok Sürümlü Eşzamanlılık Denetimi (MVCC) gibi gelişmiş mekanizmalarla ağır yükler altında bile veri bütünlüğünü ve performansı korur.
Zengin Özellik Seti: Standart SQL yeteneklerinin çok ötesinde yerel JSONB desteği, coğrafi veriler için PostGIS, tam metin araması (Full-Text Search) ve zengin bir uzantı (extension) ekosistemi sunar.
Açık Kaynak ve Maliyet Avantajı: Açık kaynak yapısı lisans maliyetlerini ortadan kaldırır ve sizi satıcı bağımlılığından (vendor lock-in) kurtarır.
Aktif Topluluk: 1989’dan bu yana kesintisiz geliştirilen PostgreSQL, güçlü bir küresel topluluk tarafından sürekli iyileştirilmektedir.
Migrasyon Öncesi Planlama ve Hazırlık
Başarılı bir geçişin sırrı, titizlikle yürütülen planlama aşamasında gizlidir. Bu adımı aceleye getirmek, canlıya geçiş anında beklenmedik sürprizlere yol açabilir.
Mevcut Veritabanını Analiz Edin: Kaynak veritabanının şemasını, veri boyutunu, veri tiplerini, indekslerini, tetikleyicilerini (triggers) ve saklı yordamlarını (stored procedures) inceleyin. Olası uyumsuzlukları önceden belirleyin.
Kapsamı ve Hedefleri Tanımlayın: Hangi veriler taşınacak? Tolere edilebilir kesinti süresi (downtime) nedir? Başarı kriterleriniz nelerdir?
Hedef Ortamı Belirleyin: PostgreSQL’i şirket içi (on-premises) sunucularda mı, Docker konteynerlerinde mi yoksa Azure Flexible Server / AWS RDS gibi yönetilen bir bulut platformunda mı barındıracaksınız?
Şema Dönüşümü ve Veri Tipi Eşleme: Heterojen migrasyonlarda (örneğin Oracle veya SQLite’tan geçiş) veri tipleri farklı davranır. SQLite’taki 0/1 veya metin tabanlı zaman damgalarının PostgreSQL tarafında BOOLEAN ve TIMESTAMP tipleriyle düzgün eşleştiğinden emin olun.
Hedef Ortamı Hazırlayın: Veritabanlarını, kullanıcıları ve rolleri oluşturun. Sunucu parametrelerini (bellek, bağlantı limitleri, WAL ayarları) beklenen iş yüküne göre optimize edin.
Yedekleme Stratejisi: Taşıma işlemine başlamadan önce kaynak veritabanının eksiksiz bir yedeğini alın.
Kesinti Süresi Planı: Sürecin bakım modunda mı yürütüleceğini yoksa mantıksal replikasyonla neredeyse sıfır kesintiyle mi tamamlanacağını netleştirin.
Temel PostgreSQL Migrasyon Yöntemleri ve Araçları
PostgreSQL ekosistemi, farklı kullanım senaryolarına özel çeşitli araçlar ve yöntemler sunar.
1. pg_dump / pg_restore (Mantıksal Yedekleme ve Geri Yükleme)
Sürümler arası veya platformlar arası veri taşımada en klasik ve esnek yöntemdir. pg_dump veritabanını SQL komutları ya da arşiv formatında dışa aktarırken, pg_dumpall tüm küme yapılarını alır.
Kullanım Alanı: Farklı majör sürümler arasındaki geçişler, işletim sistemi değişiklikleri veya bulut veritabanlarına taşınma senaryoları.
Performans İpucu: Büyük veri setlerini geri yüklerken performansı artırmak için pg_restore --jobs N parametresiyle paralel yükleme yapabilir, indeks ve foreign key tanımlarını veri yüklendikten sonraya bırakabilir ve geçici olarak maintenance_work_mem değerini artırabilirsiniz.
# Özel formatta sıkıştırılmış yedek alma
pg_dump -Fc -Z 9 -d kaynak_db > veritabani.dump
# Paralel geri yükleme
pg_restore -d hedef_db --jobs 4 veritabani.dump
2. pg_upgrade (Hızlı Sürüm Yükseltme)
Aynı sunucu üzerinde PostgreSQL’in bir ana sürümünden diğerine (örneğin PG 14’ten PG 16’ya) geçiş yaparken veri dosyalarını tamamen yeniden yüklemek yerine yerinde yükseltme sağlar.
Kullanım Alanı: Aynı donanım üzerinde minimum kesintiyle sürüm yükseltme.
Öne Çıkan Özellik: --link parametresi kullanıldığında sabit bağlantılar (hard links) üzerinden çalışır ve gigabaytlarca veriyi dakikalar içinde yeni sürüme taşır.
pg_upgrade \
--old-datadir=/var/lib/postgresql/14/data \
--new-datadir=/var/lib/postgresql/16/data \
--old-bindir=/usr/lib/postgresql/14/bin \
--new-bindir=/usr/lib/postgresql/16/bin \
--link --check
3. Mantıksal Replikasyon (Sıfıra Yakın Kesinti ile Geçiş)
Farklı PostgreSQL sürümleri veya sunucuları arasında tablo düzeyinde veri akışı sağlar.
Kullanım Alanı: Canlı sistemlerde uzun bakım pencerelerinin kabul edilemediği kritik migrasyonlar.
Çalışma Mantığı: Hedef veritabanı “Subscriber”, kaynak ise “Publisher” olarak ayarlanır. Başlangıç verisi eşitlendikten sonra yapılan tüm değişiklikler anlık olarak iletilir. Senkronizasyon tamamlandığında uygulama yönlendirmesi yapılarak birkaç saniyelik bir geçişle işlem sonlandırılır.
4. Özelleşmiş Migrasyon Araçları
pgloader: SQLite veya MySQL’den PostgreSQL’e geçişte adeta bir sihirbaz gibi çalışır. Tek bir komutla şema dönüştürme, tip eşleme ve veri transferini otomatikleştirir.
pgloader sqlite:///uygulama.db postgresql://kullanici:sifre@localhost/hedef_dbOra2Pg: Oracle’dan PostgreSQL’e geçiş için standartlaşmış bir araçtır. PL/SQL fonksiyonlarını, görünümleri (views), tetikleyicileri ve verileri PostgreSQL uyumlu hale dönüştürür; detaylı migrasyon analiz raporları sunar.
5. ORM Tabanlı Migrasyonlar (Django, SQLAlchemy)
Uygulama katmanında yer alan ORM araçları, özellikle küçük ve orta ölçekli veri setleri için kontrollü bir taşıma sağlar. Şema ORM göç komutlarıyla hedefte oluşturulduktan sonra, basit bir transfer scripti yardımıyla veriler yeni veritabanına aktarılabilir.
Sık Karşılaşılan Migrasyon Zorlukları
Veri Tipi Uyuşmazlıkları: SQLite gibi esnek sistemlerde metin olarak tutulmuş geçersiz tarih kayıtları, PostgreSQL’in katı TIMESTAMP denetiminde hata verebilir. Geçiş öncesi veri temizliği şarttır.
Eksik İndeksler ve İstatistikler: Taşıma sonrası sorguların yavaşlamasının temel nedeni güncel olmayan istatistiklerdir. Yükleme biter bitmez ANALYZE çalıştırmak hayati önem taşır.
İlişkisel Bütünlük (Foreign Key) Sorunları: Kaynak veritabanında denetimsiz kalan artık (orphan) kayıtlar PostgreSQL’in foreign key kısıtlamalarına takılabilir.
Karakter Kodlaması (Encoding): Kaynak ve hedefin UTF-8 uyumlu olduğundan emin olunmalı, olası Türkçe karakter bozulmalarının önüne geçilmelidir.
Migrasyon Sonrası Doğrulama ve Optimizasyon
Veriler aktarıldıktan sonra süreç tamamlanmış sayılmaz. Sağlam bir devreye alma için şu adımlar izlenmelidir:
Veri Doğrulama: Kaynak ve hedef tablolardaki satır sayılarını (row counts) karşılaştırın, kritik tablolarda sağlama toplamı (checksum/hash) kontrolleri yapın.
VACUUM ve ANALYZE: Tablo istatistiklerini güncelleyin:
VACUUM ANALYZE;Performans Analizi: Kritik sorguları EXPLAIN ANALYZE ile inceleyin; yavaş çalışan sorgular için eksik indeksleri tamamlayın.
Konfigürasyon Optimizasyonu: shared_buffers, work_mem ve maintenance_work_mem gibi temel bellek parametrelerini sunucu kaynaklarına uygun şekilde yapılandırın.
İzleme ve Alarm Kurulumu: CPU, bellek, disk G/Ç, bağlantı havuzu ve kilit (lock) sürelerini gözlemlemek için izleme araçlarını devreye alın.
Sonuç
PostgreSQL migrasyonu, doğru yöntemler ve titiz bir hazırlıkla yürütüldüğünde altyapınızı modernize eden, ölçeklenebilirliği artıran ve maliyetleri düşüren yüksek getirili bir yatırımdır. İster basit bir sürüm yükseltmesi olsun ister karmaşık bir heterojen geçiş; doğru adımları izlemek veritabanınızı geleceğe güvenle taşıyacaktır.


