Comment migrer mes données postgres de 8.4 à 9.1?

27

J'ai mis à niveau ma machine de développement Ubuntu de 11.04 à 11.10. Dans le processus, mes postgres ont également été mis à niveau de 8.4 à 9.1.

Mais il me semble avoir perdu toutes mes données. Si je regarde, je peux voir que mes données pour 8.4 sont dans le dossier /var/lib/postgres/8.4/mainet ma nouvelle base de données est dans /var/lib/postgres/9.1/main.

Quelle est la meilleure façon de migrer mes données vers la nouvelle version? Puis-je simplement copier les fichiers?

nathanvda
la source

Réponses:

27
su postgres
pg_dropcluster --stop 9.1 main    
pg_upgradecluster 8.4 main

Au début, cela n'a pas fonctionné pour moi pour deux raisons. Tout d'abord, postgresql-8.4 avait été désinstallé à un moment donné, j'ai donc dû le réinstaller:

sudo apt-get install postgresql-8.4

Ensuite, je devais entrer dans le 8.4 postgresql.confet passer max_connectionsà 10. Ensuite, cela a fonctionné. Vous devriez pouvoir trouver le fichier conf à/etc/postgresql/8.4/main/postgresql.conf

Marconius
la source
Sur un ordinateur, les trois premières lignes étaient suffisantes. De l'autre, j'ai dû réinstaller 8.4 pour le faire fonctionner, comme vous l'avez dit. Merci de votre aide.
nathanvda
Il convient de noter que le script "pg_upgradecluster" ne gère pas le cas où l'utilisateur de la base de données doit être fourni. (Si c'est le cas, je ne sais pas comment le fournir.)
Pointy
Si vous obtenez Error: specified cluster is not runningen réessayant après avoir changé max_connections, utilisez pg_ctlcluster 8.4 main start.
Skippy le Grand Gourou
La réduction max_connectionsn'a pas fonctionné pour moi. Comme solution alternative fournie par le message d'erreur, j'ai réduit shared_buffersà 20 Mo (au lieu de 200 Mo), ce qui a fonctionné pour moi.
Serrano
4

Après la mise à niveau vers 11.10, PostgreSQL 9.1 a été installé, mais la version en cours d'exécution était 8.4.

J'ai essayé:

su postgres
pg_dropcluster --stop 9.1 main    
pg_upgradecluster 8.4 main

Il a signalé l'erreur:

Stopping old cluster...
pg_ctl: servidor não desligou
Error: Could not stop old cluster

Donc, dans une autre fenêtre:

$ sudo service postgresql-8.4 stop
 * Stopping PostgreSQL 8.4 database server                               [ OK ] 
jgr@cagliari:~$ sudo service postgresql-8.4 start
 * Starting PostgreSQL 8.4 database server                               [ OK ] 

Et puis encore:

pg_upgradecluster 8.4 main

Des erreurs liées à pgRouting ont été signalées. Cela a pris un certain temps (toute la nuit!), Mais par la suite, la base de données a été mise à niveau vers la version 9.1. PostGIS a également été mis à niveau vers 1.5.3.

estibordo
la source
Pour info, j'ai trouvé qu'en faisant un "du -hs" dans le répertoire /var/lib/postgresql/9.1 et en le comparant ensuite avec la sortie de la même commande dans /var/lib/postgresql/8.4/, j'ai trouvé que je pouvais évaluer combien a été copié en fonction de la taille de sortie de cette commande.
Joe J
Je sais que ce n'est pas la question qui est discutée. Mais je suis tombé sur le même problème que vous avez décrit. La raison pour laquelle pg_upgradecluster n'a pas pu arrêter l'ancien cluster était parce qu'une instance de Tomcat utilisait les connexions et Postgres ne pouvait pas les fermer. J'espère que cela aide quelqu'un.
bplayer