In this guide I will explain how to upgrade postgresql to a new version. For example on the new Ubuntu 22.04 LTS version you get a message that PostgreSQL version 12 is obsolete. Before upgrading to the new Ubuntu version you should upgrade your PostgreSQL.
Checking the current PostgreSQL version
First we need to check which current versions of PostgreSQL are installed. This example is based on Debian or Ubuntu based systems. To check the installed versions we will use the dpkg command. To see the supported PostgreSQL versions check the offical website.
sudo dpkg -l | grep postgresql
postgresql-12 12.6-0ubuntu0.20.10.1 amd64 object-relational SQL database, version 12 server
postgresql-client-12 12.6-0ubuntu0.20.10.1 amd64 front-end programs for PostgreSQL 12
postgresql-client-common 225ubuntu1 all manager for multiple PostgreSQL client versions
postgresql-common 225ubuntu1 all PostgreSQL database-cluster manager
As you can see only PostgreSQL version 12 is installed on this system.
Installing a new PostgreSQL version
PostgreSQL allows for multiple versions to coexist on the same system. Before we can upgrade the existing clusters we need ton install a new version of PostgreSQL. Read through the offical PostgreSQL documentation here if the postgresql-13 version is not available.
# Always start with updating your system.
sudo apt update && sudo apt upgrade
# Install PostgreSQL server and client version 13
sudo apt install postgresql-13 postgresql-client-13
Running the same dpkg command we used earlier it will now show both PostgreSQL version 12 and 13.
sudo dpkg -l | grep postgresql
postgresql 13+225ubuntu1 all object-relational SQL database (supported version)
postgresql-12 12.6-0ubuntu0.20.10.1 amd64 object-relational SQL database, version 12 server
postgresql-13 13.2-1 amd64 The World`s Most Advanced Open Source Relational Database
postgresql-client 13+225ubuntu1 all front-end programs for PostgreSQL (supported version)
postgresql-client-12 12.6-0ubuntu0.20.10.1 amd64 front-end programs for PostgreSQL 12
postgresql-client-13 13.2-1 amd64 front-end programs for PostgreSQL 13
postgresql-client-common 225ubuntu1 all manager for multiple PostgreSQL client versions
postgresql-common 225ubuntu1 all PostgreSQL database-cluster manager
Upgrading PostgreSQL
Now that have both version 12 and 13 installed we can begin with updating the existing PostgreSQL cluster.
First we check the status of the clusters with the pg_clusters command. This should show both clusters online
sudo pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
13 main 5433 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
Out of the box the PostgreSQL version 13 cluster “main” is created at installation. When trying to upgrade our “main” version 12 it will clash with the existing version 13 “main”. We will need to drop this cluster with the pg_dropcluster command.
sudo pg_dropcluster 13 main --stop
Now we can upgrade the “main” cluster from version 12 to version 13 with the pg_upgradecluster command.
sudo pg_upgradecluster 12 main
With the pg_lsclusters command we can verify the status of the clusters. Version 12 should be down now.
sudo pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
12 main 5433 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
13 main 5432 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
When everything is running fine we can delete the version 12 “main” cluster and remove the PostgreSQL version 12 packages
sudo pg_dropcluster 12 main
sudo apt-get purge postgresql-12 postgresql-client-12
Conclusion
By following these steps you should be able to upgrade your existing PostgreSQL version 12 cluster to version 13. These steps for will also work for example upgrading version 13 to version 14. If you have any questions post them in the comments!