Temelde PostgreSQL'i farklı versiyonlardan (örneğin 9.1'den 9.3'e) yükseltmenin üç yolu vardır.
Pg_dump ile yükseltme
İlki, eğer mümkünse, daha yeni (9.3) sürümün ikilisini kullanarak eski (9.1) sürümden bir döküm yapmak ve onu yeni sürümden oluşturulan yeni bir kümeye geri yüklemek.
Bu yaklaşım, genellikle, en yavaş olanıdır, fakat aynı zamanda en uygulanabilir olanıdır. Daha hızlı yapmak için bir ipucu, eşzamanlılık kullanıyor. Paralel işlerle uğraşmak için şunları yapabilirsiniz:
$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
Sahip olduğunuz her veritabanı için bunu yapmanız, --jobs=4
değeri herhangi bir değere ayarlamanız gerekir (bazı değerleri 2'den çekirdek sayısına test edin ve hangisinin daha iyi hız verdiğini görün). Ayrıca, bu aşamada, hiç kimse veritabanına bağlanmamalıdır, herhangi bir değişiklik bozuk bir döküme neden olur (güvenli olmayan seçenek nedeniyle --no-synchronized-snapshots
).
Ondan sonra, aşağıdakileri kullanarak yeni örneğe dökümü geri yükleyebilirsiniz pg_restore
:
$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump
Bundan sonra, ANALYZE
veritabanında çalıştırmanız önerilir :
$ vacuumdb --analyze-only mydatabase
(zaman gelemez, sadece koşmak --analyze
ayrıca VACUUM
veritabanı ve görünürlük eşler güncelleme)
Pg_upgrade ile yükseltme
Başka bir seçenek, katkıyıpg_upgrade
kullanmaktır . --link
Yöntemi kullanarak PostgreSQL'i yükseltmek için gerçekten hızlı bir yol sunar.
Kullanmadan önce, tüm veri dizinini yedeklemeniz gerekir, çünkü --link
modunda, bir şeyler ters giderse, her iki veriyi de kaybedebilirsiniz (yeni ve eski). Ayrıca tüm dokümanları ve özellikle alttaki notları okuyun (pg_upgrade için bazı sınırlamalar vardır).
GÜNCELLEME: Lütfen --check
kesin komutu çalıştırmadan önce bu seçeneği kullanın. Ayrıca, büyük veritabanları için bu komutu bir ekran oturumunda çalıştırmanız önerilir.
Tetikleme tabanlı bir çoğaltma aracı kullanarak yükseltme
Bir sürümü yükseltmek için başka bir seçenek, tetikleyiciye dayalı bir çoğaltma aracı kullanmaktır. Slony, Bucardo ve Londiste gibi.
Bu mümkün olan en az aksama süresini gerektiren seçenektir, ancak üzerinde çalışılması en zor olanı budur.
Bunu yapmak için, master'in geçerli sürümünüz (9.1) ve slave'in yeni sürüm (9.3) olduğu bir master-slave oluşturmanız gerekir. Daha sonra, ilk senkronizasyonu bekleyin (sistem hala üretimde), bundan sonra veritabanına bağlı olan herkesi kapatırsınız (kapalı kalma süresi burada başlar), kölenin yakalanmasını bekleyin, (kölenin) ustalaşmasını bekleyin ve tüm müşterileri / uygulamaları bu yeni sürüme yönlendir. Ve bitti.
Slony belgeleri, Slony kullanarak PostgreSQL'i yükseltmek için adım adım ilerletir .
Hangisini seçmek
Eh, her zaman olduğu gibi devam eder:
- Dökümü + geri yükleme en güvenilir, ancak genellikle en yavaş olanıdır (paralellik olsa da oldukça iyi sonuçlar verebilir)
- Pg_upgrade, az aksama süresi için en iyi seçeneklerden biridir (eğer kullanabilirseniz, kısıtlamaları görebilirsiniz), büyük veritabanları için bile, sadece birkaç dakika sürer.
- Tetikleyici çoğaltma, hiç şüphesiz mümkün olan en az aksama süresini verendir (sıfıra yakın), ancak elde edilmesi gerçekten zordur ve yalnızca tecrübeli insanlar için (hem PostgreSQL hem de çoğaltma aracında) tavsiye ederim.
Umarım yardımcı olabilmişimdir. İyi şanslar.