PostgreSQL
Mise à jour
# Stocker l'ancienne version de PostgreSQL, utile pour plus tard
set PG_VERSION $(cat /var/lib/pgsql/data/PG_VERSION)
# Monter la dernière sauvegarde pour récupérer les libs manquantes
mkdir /mnt/backup
borgmatic mount --archive latest --mount-point /mnt/backup
# Copier les anciennes libs dans le dossier des anciennes libs
cp /mnt/backup/usr/lib64/pgsql/*.so /usr/lib64/pgsql/postgresql-$PG_VERSION/lib/
# Déplacer les données de l'ancienne version
mv /var/lib/pgsql/data /var/lib/pgsql/data-old
# Initialiser le répertoire de données pour la nouvelle version
mkdir /var/lib/pgsql/data
chown postgres: /var/lib/pgsql/data
sudo -iu postgres /usr/bin/initdb --pgdata=/var/lib/pgsql/data --auth=ident
# Faire la migration de données
sudo -iu postgres /usr/bin/pg_upgrade \
--old-bindir=/usr/lib64/pgsql/postgresql-$PG_VERSION/bin \
--new-bindir=/usr/bin \
--old-datadir=/var/lib/pgsql/data-old \
--new-datadir=/var/lib/pgsql/data
--link --old-port=5432 --new-port=5432 --username=postgres
# Copier les fichiers de configuration
cp /var/lib/pgsql/data-old/postgresql.conf /var/lib/pgsql/data
cp /var/lib/pgsql/data-old/pg_hba.conf /var/lib/pgsql/data
# Démarrer PostgreSQL
systemctl restart postgresql
# Optimiser la nouvelle version
sudo -iu postgres /usr/bin/vacuumdb -U postgres --all --analyze-in-stages
sudo -iu postgres ./delete_old_cluster.sh
Troubleshooting
The database was created using collation version X.XX, but the operating system provides version Y.YY
sudo -iu postgres
for t in `psql -tAc "SELECT datname FROM pg_database WHERE datistemplate = false"`; do psql -d $t -c "REINDEX DATABASE $t"; psql -d $t -c "ALTER DATABASE $t REFRESH COLLATION VERSION" ; done
for t in `psql -tAc "SELECT datname FROM pg_database WHERE datistemplate = true"`; do psql -c "ALTER DATABASE $t REFRESH COLLATION VERSION" ; done