Install latest version
sudo apt install postgresql-16 postgresql-client-16List clusters
sudo pg_lsclustersoutput
Ver Cluster Port Status Owner Data directory Log file
15 main 5432 online postgres /var/lib/postgresql/15/main /var/log/postgresql/postgresql-15-main.log
16 main 5433 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log
drop the newly created cluster (which should be empty)
sudo pg_dropcluster 16 main --stopverify
sudo pg_lsclustersoutput
Ver Cluster Port Status Owner Data directory Log file
15 main 5432 online postgres /var/lib/postgresql/15/main /var/log/postgresql/postgresql-15-main.log
upgrade the existing cluster to the latest version
sudo pg_upgradecluster 15 mainverify
sudo pg_lsclustersoutput
Ver Cluster Port Status Owner Data directory Log file
15 main 5433 down postgres /var/lib/postgresql/15/main /var/log/postgresql/postgresql-15-main.log
16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log
drop old cluster
sudo pg_dropcluster 15 mainremove old version packages
sudo apt purge postgresql-15 postgresql-client-15verify, cluster version 16 is up and running
sudo pg_lsclustersVer Cluster Port Status Owner Data directory Log file
16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log