Upgrading PostgreSQL Version on Ubuntu Server

Overview

We're going to be upgrading PostgreSQL server on Ubuntu in this guide. It doesn't matter which version you're upgrading from or to. You can do this with Postgres 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16 or whatever is the most recent version.

In this example, I'm upgrading Postgres 14 to Postgres 15 but all you have to do is replace the version numbers in the commands below to match which old version you're using and the new version you're upgrading to.

This only takes a couple minutes if you have a small database, so let's get started!

1. Install the latest version of Postgres

If you're using the default version available on Ubuntu, you can just upgrade to the latest postgres by running the following:

sudo apt-get upgrade

Otherwise if you want to upgrade to the very latest Postgres version, you can follow the instructions on their website here: https://www.postgresql.org/download/linux/ubuntu/

To find the installed versions that you currently have on your machine, you can run the following:

$ dpkg --get-selections | grep postgres
postgresql-14                   install
postgresql-15                   install
postgresql-client               install
postgresql-client-14                install
postgresql-client-15                install
postgresql-client-common            install
postgresql-common               install

You can also list the clusters that are on your machine by running

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

2. Stop Postgres before we make any changes

First thing's first, we need to stop any services using postgres so we can safely migrate our database.

sudo service postgresql stop

3. Rename the new Postgres version's default cluster

When Postgres packages install, they create a default cluster for you to use. We need to rename the new postgres cluster so that when we upgrade the old cluster the names won't conflict.

sudo pg_renamecluster 15 main main_pristine

4. Upgrade the old cluster to the latest version

Replace the version (14) here with the old version of Postgres that you're currently using.

sudo pg_upgradecluster 14 main

5. Make sure everything is working again

We can start Postgres back up again and this time it should be running the new postgres 15 cluster.

sudo service postgresql start

You should also see that the old cluster is down and the new version of Postgres is up:

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

6. Drop the old cluster

Optionally, you can drop the old cluster once you've verified the new one works and you don't need the old cluster anymore.

sudo pg_dropcluster 14 main --stop

You can also drop the pristine database from the newer version as well.

sudo pg_dropcluster 15 main_pristine --stop

Want to stay up-to-date with Ruby on Rails?

Join 82,464+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.