Passer au contenu principal

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

# Nettoyage
sudo -iu postgres ./delete_old_cluster.sh
umount /mnt/backup

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