Skip to main content

Your submission was sent successfully! Close

Thank you for signing up for our newsletter!
In these regular emails you will find the latest updates from Canonical and upcoming events where you can meet our team.Close

Thank you for contacting us. A member of our team will be in touch shortly. Close

An error occurred while submitting your form. Please try again or file a bug report. Close

How to upgrade PostgreSQL 12 to version 14

Create a data backup

Optional but strongly advised: backup all existing data.

sudo -u postgres pg_dumpall > backup.sql

Perform the upgrade

  1. Update and install packages
    sudo apt-get update
    sudo apt-get install postgresql-14 postgresql-server-dev-14
  1. Halt the old server
    sudo systemctl stop postgresql.service
  1. Migrate configuration files
    sudo -u postgres /usr/lib/postgresql/14/bin/pg_upgrade \
    --old-datadir=/var/lib/postgresql/12/main \
    --new-datadir=/var/lib/postgresql/14/main \
    --old-bindir=/usr/lib/postgresql/12/bin \
    --new-bindir=/usr/lib/postgresql/14/bin \
    --old-options '-c config_file=/etc/postgresql/12/main/postgresql.conf' \
    --new-options '-c config_file=/etc/postgresql/14/main/postgresql.conf'
  1. Reconfigure server ports
    sudo vim /etc/postgresql/14/main/postgresql.conf  # Set port to 5432
    sudo vim /etc/postgresql/12/main/postgresql.conf  # Set port to 5433
  1. Activate new server and verify version
    sudo systemctl start postgresql.service
    sudo -u postgres psql -c "SELECT version();"
  1. Execute new cluster script
    sudo -u postgres ./analyze_new_cluster.sh

Reset user passwords

PostgreSQL v14 defaults to scram-sha-256 for password hashing. Redefine all existing passwords.

sudo -u postgres psql
postgres=# \password $USER

Or, modify /etc/postgresql/14/main/pg_hba.conf to switch back to md5. But be cautious, as future versions may not support MD5.

Remove old version

  1. Remove old packages
    sudo apt-get remove postgresql-12 postgresql-server-dev-12
  1. Delete configuration and data
    sudo rm -rf /etc/postgresql/12/
    sudo -u postgres ./delete_old_cluster.sh

Last updated a month ago. Help improve this document in the forum.