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.