Aussi nous devons procéder manuellement à la migration des données postgresql.
Avant toute chose vérifions que la variable d'environnement PGDATA existe et qu'elle contient ce qui convient:
[toto@rigel ~]$ echo $PGDATA
/var/lib/pgsql/data
/var/lib/pgsql/data
Ceci sera le cas si nous avons placé dans /etc/profile.d un fichier pgsql.sh comme expliqué ici.
Installons postgresql-upgrade (si celui-ci ne l'est pas):
[toto@rigel ~]$ su -
Mot de passe :
[root@rigel ~]# yum install postgresql-upgrade
Mot de passe :
[root@rigel ~]# yum install postgresql-upgrade
Nous serons amené à agir en tant qu'utilisateur postgres. Le plus simple pour ce faire est de procéder dans une autre fenêtre.
[toto@rigel ~]$ su -
Mot de passe :
[root@rigel ~]# su - postgres
Mot de passe :
[root@rigel ~]# su - postgres
-bash-4.2$ mv /var/lib/pgsql/data/ /var/lib/pgsql/data_9.2/
Nous avons renommé les anciennes données.
Ensuite (en tant que root):
[root@rigel ~]# postgresql-setup initdb
Puis dans la fenêtre où l'on est postgres:
-bash-4.2$ cp /var/lib/pgsql/data_9.2/pg_hba.conf /var/lib/pgsql/data/
-bash-4.2$ pg_upgrade -b /usr/lib64/pgsql/postgresql-9.2/bin/ -B /usr/bin/ -d data_9.2/ -D data
-bash-4.2$ pg_upgrade -b /usr/lib64/pgsql/postgresql-9.2/bin/ -B /usr/bin/ -d data_9.2/ -D data
Tout semble se dérouler à merveille.
Et soudain l'erreur fatale:
lc_collate cluster values do not match: old "fr_FR.UTF-8", new "fr_FR.utf8"
Il faut recommencer après avoir remplacé utf8 par UTF-8 dans /etc/locale.conf
[root@rigel ~]# sed -i 's/utf8/UTF-8/' /etc/locale.conf
[root@rigel ~]# rm -rf /var/lib/pgsql/data
[root@rigel ~]# postgresql-setup initdb
[root@rigel ~]# rm -rf /var/lib/pgsql/data
[root@rigel ~]# postgresql-setup initdb
Cette fois, l'étape suivant ne pose aucun problème.
Ne pas oublier de recopier pg_ident.conf (si celui-ci est utilisé):
-bash-4.2$ cp /var/lib/pgsql/data_9.2/pg_ident.conf /var/lib/pgsql/data/
et aussi d'adapter éventuellement le fichier postgresql.conf suivant par exemple ce qui est expliqué ici.
Reste à démarrer le service:
[root@rigel]# systemctl start postgresql.service