Logo PostgreSQL

Pada tulisan ini adalah cara upgrade PostgrSQL pada server Ubuntu. Saya melakukan upgrade dari PostgreSQL 10 ke PostgreSQL 12 pada server Ubuntu. Meski begitu, untuk upgrade dengan versi lain cukup diganti dengan angka versi PostgreSQL yang diinginkan karena langkah-langkahnya sama.

1. Install Versi Terbaru PostgreSQL

Jika PostgreSQL sudah terpasang pada server Ubuntu, biasanya saat dilakukan upgrade server Ubuntu PostgreSQL yang terbaru otomatis ter-install.

Cara lain untuk upgrade versi terbaru PostgreSQL dapat dilakukan dengan menjalankan dibawah ini.

# Install versi terbaru PostgreSQL
# Jika ingin versi tertentu, misal versi 12, ganti 'postgresql dengan 'postgresql-12'
sudo apt-get -y install postgresql

Untuk lebih detil dapat dilihat melalui https://www.postgresql.org/download/linux/ubuntu/.

Jika instalasi berhasil, maka akan terdapat dua buah PostgreSQL seperti berikut. Terlihat ada PostgreSQL 10 dan PostgreSQL 12.

kak@kak:~$ dpkg --get-selections | grep postgres
postgresql                 install
postgresql-10              install
postgresql-12              install
postgresql-client-10       install
postgresql-client-12       install
postgresql-client-9.5      install
postgresql-client-common   install
postgresql-common          install
postgresql-contrib

Cara kedua dapat menggunakan perintah ps untuk mengecek versi PostgreSQL yang telah berhasil di-install dan sedang aktif seperti berikut.

$ ps aux | grep postgre
example_user     630  0.1  1.4 218580 29336 ?        Ss   20:20   0:00 /usr/lib/postgresql/12/bin/postgres -D /var/lib/postgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.conf
example_user     631  0.2  1.4 251368 28784 ?        S    20:20   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf
example_user     634  0.0  0.2 218580  4388 ?        Ss   20:20   0:00 example_user: 12/main: checkpointer
example_user     635  0.0  0.2 218580  6100 ?        Ss   20:20   0:00 example_user: 12/main: background writer
example_user     636  0.0  0.2 218580  6048 ?        Ss   20:20   0:00 example_user: 12/main: walwriter
example_user     637  0.0  0.4 219116  8708 ?        Ss   20:20   0:00 example_user: 12/main: autovacuum launcher
example_user     638  0.0  0.2  72960  4968 ?        Ss   20:20   0:00 example_user: 12/main: stats collector
example_user     639  0.0  0.3 219012  6996 ?        Ss   20:20   0:00 example_user: 12/main: logical replication launcher
example_user     640  0.0  0.2 251368  4428 ?        Ss   20:20   0:00 example_user: 10/main: checkpointer process
example_user     641  0.0  0.2 251368  6064 ?        Ss   20:20   0:00 example_user: 10/main: writer process
example_user     642  0.0  0.2 251368  4428 ?        Ss   20:20   0:00 example_user: 10/main: wal writer process
example_user     643  0.0  0.3 251772  7256 ?        Ss   20:20   0:00 example_user: 10/main: autovacuum launcher process
example_user     644  0.0  0.2 106424  5604 ?        Ss   20:20   0:00 example_user: 10/main: stats collector process
example_user     645  0.0  0.3 251652  7184 ?        Ss   20:20   0:00 example_user: 10/main: bgworker: logical replication launcher

2. Cek Cluster PostgreSQL

Jika poin 1 berhasil dilakukan, saat menjalankan pg_lsclusters untuk melihat daftar cluster, maka akan ada dua jenis cluster PostgreSQL, yaitu cluster PostgreSQL versi 10 dan 12. Terlihat versi 10 dan 12 sama-sama memiliki cluster bernama main.

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
12  main    5433 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

3. Matikan Service PostgreSQL

Agar dapat upgrade PostgreSQL 10 ke PostgreSQL 12 perlu dimatikan service PostgreSQL yang sedang berjalan.

sudo service postgresql stop

Menjalankan pg_lsclusters akan terlihat seluruh cluster statusnya adalah down.

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
12  main    5433 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

3. Ganti Nama Cluster PostgreSQL Versi Terbaru

Upgrade PostgreSQL 10 ke PostgreSQL 12 akan menggunakan nama cluster main, sehingga cluster main pada PostgreSQL versi 12 perlu ganti nama / rename dahulu agar tidak konflik. Misal main diganti menjadi main_12.

sudo pg_renamecluster 12 main main_12

Jika berhasil, saat dijalankan pg_lsclusters akan terdapat nama main_12, berbeda dengan hasil poin 2 diatas.

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory                 Log file
10  main    5432 down   postgres /var/lib/postgresql/10/main    /var/log/postgresql/postgresql-10-main.log
12  main_12 5433 down   postgres /var/lib/postgresql/12/main_12 /var/log/postgresql/postgresql-12-main_12.log

4. Upgrade Cluster Pada PostgreSQL Versi Lama ke PostgreSQL Versi Baru

Pada bagian ini, seluruh data pada database cluster main PostgreSQL 10 akan diupgrade untuk dijalankan oleh PostgreSQL 12. Semakin banyak data akan semakin lama.

$ sudo pg_upgradecluster 10 main

Cek dengan pg_lsclusters terlihat cluster main PostgreSQL 12 adalah online.

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
12  main    5433 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

5. Hapus Cluster Lama

Berhubung cluster versi lama PostgreSQL sudah tidak digunakan, cluster lama dapat dihapus.

sudo pg_dropcluster 10 main

6. Hapus Paket lama PostgreSQL hasil dpkg

Lalu paket lama hasil dpkg pada poin 1 juga dapat dihapus. Cara hapus paket lama PostgreSQL dapat dilakukan dengan cara berikut.

sudo apt-get --purge autoremove postgresql-client-9.5
sudo apt-get --purge autoremove postgresql-client-10
sudo apt-get --purge autoremove postgresql-10