Starting with MAAS 3.6, you must upgrade PostgreSQL from version 14 to version 16. This guide will explain the process.
Create a data backup
Backup all existing data: optional, but strongly advised.
sudo -u postgres pg_dumpall > backup.sql
Perform the upgrade
If you’re running PostgreSQL v14 on your MAAS machine, you must upgrade before installing MAAS version 3.6.
Install PostgreSQL 16.
sudo apt update
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt-get install -y postgresql-16 postgresql-server-dev-16
Create and initialize a PostgreSQL 16 instance
Follow the PostgreSQL setup documentation, as server configurations vary.
Halt the old server
sudo systemctl stop postgresql
Migrate the configuration files
The pg_upgrade
command will write some files in the directory of execution. This command must be run by the postgres
user, so run it a permitted directory (such as /tmp
).
cd /tmp
# copy the data, bin and config files from the new to the old version
sudo -u postgres /usr/lib/postgresql/16/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/14/main \
--new-datadir=/var/lib/postgresql/16/main \
--old-bindir=/usr/lib/postgresql/14/bin \
--new-bindir=/usr/lib/postgresql/16/bin \
--old-options '-c config_file=/etc/postgresql/14/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/16/main/postgresql.conf'
Reconfigure the server ports
The current version of PostgreSQL should generally use port 5432.
sudo vim /etc/postgresql/16/main/postgresql.conf # Set port to 5432
sudo vim /etc/postgresql/14/main/postgresql.conf # Set port to 5433
Activate the new server and verify version
Always check to make sure you are running the version you expect.
sudo systemctl start postgresql
sudo -u postgres psql -c "SELECT version();"
Complete the upgrade
Vacuum the database to clean it up before using it routinely.
sudo -u postgres /usr/lib/postgresql/16/bin/vacuumdb --all --analyze-in-stages
Delete the old version
First, remove the old packages:
sudo apt remove -y postgresql-14 postgresql-server-dev-14
Finally, delete configuration files and data from the old version:
sudo rm -rf /etc/postgresql/14/
sudo -u postgres /tmp/delete_old_cluster.sh
This completes the upgrade from PostgreSQL v14 to v16.