PostgreSQL 11 to 12 Upgrade

PostgreSQL gün geçtikçe gelişiyor ve her yeni sürümde farklı özellikleri geliyor postgresql12 de gelen bazı özelliklerden birisi  B-tree index de okuma/yazma performansında optimizasyonlar yapıldı ve REINDEX CONCURRENTLY  özelliği eklendi ve bunun gibi bir sürü yeni özellik geldi.

Upgrade için  ilk olarak  postgresql12  kurulumlarını tamamlamamız gerekiyor . Aşağıdaki gibi postgresql12 yi paketleri ile beraber kuruyoruz.

yum install postgresql12 postgresql12-devel postgresql12-contrib postgresql12-libs postgresql12-server

Kurulumu tamamladık şimdi postgres kullanıcısına geçerek aşağıdaki gibi data ve log dosyalarını belirterek initdb yapıyoruz .Belirtilmez ise default path de kurulacaktır.

/usr/pgsql-11/bin/initdb -D DATA_DOSYASI -X LOG_DOSYASI

-D parametresi ile data dosyaların oluşacağı yeri ,-X ile de log dosyalarının tutulacağı yeri belirtiyoruz.

/usr/pgsql-12/bin/initdb -D /postgresql12/data -X /postgresql12/log

İnitdb başarılı şekilde gerçekleştiğini görüyoruz.

 

Postgresql12 kurulumu ve initdb kurulumu yaptık servisi durdurup upgrade işlemine başlayabiliriz.

systemctl stop postgresql-11

Servisi durdurduktan sonra upgrade testini yapacağız bunu yaparken aşağıdaki komutları eksiksiz doldurmanız gerekiyor.

/usr/pgsql-12/bin/pg_upgrade \   --old-datadir= postgresql11 data dizini \   --new-datadir=postgresql12 data dizini \   --old-bindir=postgresql11 bin dosyası \   --new-bindir=postgresql12 bin dosyası \   --old-options '-c config_file=postgresql11 postgresql.conf dosyası' \   --new-options '-c config_file=postgresql12 postgresql.conf dosyası' \   --check

Yukarıda ki pg_upgrade scriptini düzenleyip  aşağıdaki hale getiriyoruz ve upgrade testini yapıyoruz.

/usr/pgsql-12/bin/pg_upgrade \   --old-datadir=/postgresql11/data \   --new-datadir=/postgresql12/data \   --old-bindir=/usr/pgsql-11/bin \   --new-bindir=/usr/pgsql-12/bin \   --old-options '-c config_file=/postgresql11/data/postgresql.conf' \   --new-options '-c config_file=/postgresql12/data/postgresql.conf' \   --check

 

Yukarıda görüldüğü gibi upgrademizin sorunsuz olacağı belirtiliyor bundan sonra check komutunu kaldırarak yeniden çalıştırıp upgrade’i gerçekleştiriyoruz.

 /usr/pgsql-12/bin/pg_upgrade \

  --old-datadir=/postgresql11/data \

  --new-datadir=/postgresql12/data \

  --old-bindir=/usr/pgsql-11/bin \

  --new-bindir=/usr/pgsql-12/bin \

  --old-options '-c config_file=/postgresql11/data/postgresql.conf' \

  --new-options '-c config_file=/postgresql12/data/postgresql.conf' \

 

Upgrade yapıldı servisi enable etmemiz gerekiyor fakat bundan önce postgresql-12 servisinde ki  Environment=PGDATA parametresini  kendi data dizinimizi yazarak değiştirmemiz gerekiyor.

Postgresql-12 servisini root kullanıcısı ile yapmanız gerekiyor .

vi /lib/systemd/system/postgresql-12.service

Environment=PGDATA  parametresinin karşısına  postgresql-12  data dizinini yazıyoruz ve kaydedip çıkıyoruz.

Servisi enable ediyoruz.

systemctl enable postgresql-12

Servisi başlatıyoruz.

systemctl start postgresql-12

Servisin durumunu kontrol edelim.

systemctl status postgresql-12

 

Görüldüğü üzere  yeni data dizininden servisi başlatmış bulunuyoruz.

Upgrade de bir problem olmadığını gördünüz ve gerekli testleri yaptınız ve postgresql11 dizinini silmek istiyorsanız postgresql sizin için sh scripti hazırlıyor.

delete_old_cluster.sh

Yukarıdaki .sh dosyasını çalışıtrdığınızda postgresql11 ile ilgili herşeyiniz gidecektir…

NOT : Testlerinizi çalıştırmadan  delete_old_cluster.sh   scriptini çalıştırmamanızı öneririm.

Loading