PostgreSQL 10’u 12’ye güncelleme

postgresql

Notebook’umda kullandığım PostgreSQL 10 sürümü veritabanıdağıtımını sonunda 12 sürümüne çekme kararı verdim. Daha önce kullandığım işletim sistemi emrivaki yapıp 12 sürümünü yükledikten sonra güncellemeyi de kendin yap diyince, acil işim olduğundan kurulan 12 sürümünü pruge edip 10 sürümünden devam etmiştim. Ama artık Corona sağolsun evde tıkılı kaldığım şu zamanda sallamadığım güncelleme işine girişebilirim.

Öncelikle purge ile kaldırdığım paketi yeniden kurarak işe başladım:

# apt install postgresql-12

Daha sonra postgres.conf ve pg_hba.conf ayarlarını 10’dan 12’ye aktarıyoruz. Bunun için iki sürümün dosyalarındaki farklara aşağıdaki gibi bakabilirsiniz:

# diff /etc/postgresql/10/main/postgresql.conf /etc/postgresql/12/main/postgresql.conf
# diff /etc/postgresql/10/main/pg_hba.conf /etc/postgresql/12/main/pg_hba.conf

Ayarları aktarma işleminden sonra çalışan postgresql servisini durdurun

# sudo systemctl stop postgresql.service

Servisi durdurduktan sonra yükseltme işlemini “postgres” kullanıcısı ile yapmaya başlayacağız. Bunun için “postgres” kullanıcısına geçin:

# sudo su postgress

Yükseltme işlemine geçmeden önce son olarak cluster’ları kontrol edelim:

# /usr/lib/postgresql/12/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/10/main \
--new-datadir=/var/lib/postgresql/12/main \
--old-bindir=/usr/lib/postgresql/10/bin \
--new-bindir=/usr/lib/postgresql/12/bin \
--old-options '-c config_file=/etc/postgresql/10/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf' \
--check

Yukarıdaki komutun sonundaki “–check” anahtarı size yapılacak işlemi herhangi bir değişiklik yapmadan çalıştırıp (dry run) herhangi bir sorun olup olmayacağını gösterecektir. Eğer bir sorun görünmezse aynı komutu “–check” anahtarını silip tekrar çalıştıracağız:

# /usr/lib/postgresql/12/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/10/main \
--new-datadir=/var/lib/postgresql/12/main \
--old-bindir=/usr/lib/postgresql/10/bin \
--new-bindir=/usr/lib/postgresql/12/bin \
--old-options '-c config_file=/etc/postgresql/10/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf'

Bu işlemin süresi, veri tabnaının barındığı medyanın hızı, veritabanı sayısı ve boyutuna göre değişiklik gösterecektir. HDD üzerindeki ~90GB boyutundaki veritabanını aktardığımda süre tutmadım ama en az 2 saat sürdüğünü söyleyebilirim. Yükseltme işlemi bittikten sonra “postgres” kullnıcısını terk edip yeni PostgreSQL sunucu ayarlarındaki portu olması gerekn port haline getiriyoruz. Tabi eski sunucunun port ayarını da değiştirmemiz gerekiyor:

# sudo nano /etc/postgresql/12/main/postgresql.conf

"port = 5433" satırını "port = 5432" olarak değiştirin.

# sudo nano /etc/postgresql/10/main/postgresql.conf

"port = 5432" satırını "port = 5433" olarak değiştirin.

Ve PostgreSQL servisini yenidne başlatın:

# sudo systemctl start postgresql.service

Şu andan itibaren sürüm 10, 5433 portundan, sürüm 12 ise standart 5432 portundan yayın yapmaya başladı. unutmayın halen 10 sürümüne geri dönebilir durumdasınız. Sadece port numaralarını değiştirerek eskiv eri tabnına erişebilirsiniz. Ya da mevcut port üzerinden bir client ile erişilebilir. Öntanımlı portta çalışan veritabanı sunucu sürümünü öğrenmek için aşağdaki komutu girebilirsiniz:

# sudo su postgres
# psql -c "SELECT version();"

Yeni veritabanı için bir takım optimizasyonlar yapmak maksadıyla aşağıdaki komutu çalıştıracağız.

# ./analyze_new_cluster.sh
# exit

Tebrikler. Güncellenmiş PostgreSQL ve yükseltilmiş veritabnınız kullanıma hazır.

Bu adımdan sonra yapılacaklar eski veritabanının ve sunucusunun sistemden kaldırılması adımlarıdır. Eğer birşeylerden emin değilseniz bu adımlara geçiş yapmayın!

# apt list --installed | grep postgresql
# sudo apt-get remove postgresql-10 postgresql-server-dev-10
# sudo rm -rf /etc/postgresql/10/
# sudo su postgres
# ./delete_old_cluster.sh