Debian üzerinde PostgreSQL Veritabanını yerinde upgrade yapmak

Alparslan Ozturk
3 min readOct 14, 2021

Öncelikle binary paketlerinin 13 ve 14 aynı sunucuda yüklü olmasını sağlamalıyız. Bu işlemer için aşağıdaki komutlardan örnek alabilirsiniz.

pg_createcluster komudunda “ -l tr_TR.UTF-8” yada “ — data-cheksums” eklemişseniz. yeni veritabanında aynı olmalıdır.

/usr/lib/postgresql/13/bin/pg_checksums -e -D /pg_data/13/main/

gerci sonradan da cluster stop ederek yukarıdaki komutlar enable yapabilirsiniz.

root:
apt install postgresql-13
pg_createcluster 13 main -d /pg_data/13/main -- --data-checksums
pg_ctlcluster stop 13 main
... uzun bir zaman sonra ... :-)root:
apt install postgresql-14
pg_createcluster 14 main -d /pg_data/14/main -- --data-checksums
pg_ctlcluster stop 14 main

Durumu söyle bir kontrol edin isterseniz.

apt list postgres* — installed

Hatta durumu kontrol için start/stop yaparak durumu gözlemleyebilirsiniz.

client 14 ve sunucu 13
Tabi sonasında 14 main cluster için port değişimi de yapabilirsiniz. şuan 5433 portundan çalışacak şekilde kurulmuştur.
pg_lscluster

Dikkat edilmesi gereken nokta yeni PostgreSQL binari’nin pg_upgarde komudunuzu kullanmanız gerekir.

/usr/lib/postgresql/14/bin/pg_upgrade \
--old-bindir=/usr/lib/postgresql/13/bin \
--new-bindir=/usr/lib/postgresql/14/bin \
--old-datadir=/etc/postgresql/13/main \
--new-datadir=/etc/postgresql/14/main \
--link \
--check \
--verbose

Daha sonra “ — check” kaldırılıp, işlemi uygulabilirsiniz.

Komut çalıştırdıktan sonra aşağıdaki 2 işelmide yaptıktan sonra kullanıma hazırdır.

vacum&analyze ve delete…
/usr/lib/postgresql/14/bin/vacuumdb --all --analyze-in-stages
vacuumdb: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
postgres@db4:~$ pg_ctlcluster start 14 main
Warning: the cluster will not be running as a systemd service. Consider using systemctl:
sudo systemctl start postgresql@14-main

tabi önce port değiştirmek ve yeni vertibanı açmak lazım yoksa aşağıdaki hatayı alırsınız.

port 5433 -> 5432 yapılır.
yeni veritabanı start yapılır ve vacum&analyze işlemi çalışır.

Aşağıdaki gibi bir sorun yaşarsanız. chown yapmayı unutmayın.

nedense delete işlemi olmamış. Aşağıdaki komutlarla elle silelim
postgres:pg_dropcluster 13 main
pg_lsclusters
Bitti.

--

--