dimanche 29 décembre 2013

Postgresql upgrade

Lors du passage de Fedora 19 à Fedora 20, postgresql passe de la version 9.2 à la version 9.3
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

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

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
-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

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

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