2010-09-01 8 views
1

J'ai mis à niveau mon Ubuntu 8.04 vers Ubuntu 10.04. Malheureusement, le processus de mise à niveau a également mis à jour l'installation de Postgres 8.3 vers une installation de Postgres 8.4. Mon sentiment est que même si les binaires du moteur de base de données ont été mis à jour, la base de données elle-même n'a pas été migrée, par conséquent, elle ne peut pas être chargée par le 8.4. Étant donné que le format de données 8.3 n'est pas compatible avec le format 8.4, la modification de postgresql.conf n'est pas suffisante, et je ne peux pas non plus utiliser pg_dump avec mon installation 8.4.Mettre à jour le fichier de base de données Postgresql 8.3 à 8.4

J'ai besoin d'un moyen de mettre à jour ma base précédente de 8.3 à 8.4, sans accès à un moteur 8.3, seulement 8.4.

Une idée?

Répondre

0

Vous devez installer PostgreSQL 8.3 dans un emplacement temporaire de la source, copiez vos anciennes données là, commencer Pg, vider les données à l'aide de pd_dumpall puis importer ces données à de nouveaux Postgres.

C'est impossible sans installer Pg 8.3.

+0

Cela a fonctionné comme un charme! Je l'ai compilé à partir de la source, en utilisant --enable-integer-datetimes et --without-readline. Seulement alors, j'étais capable de pg_dumpall. Merci! – SCO

0

Assurez-vous de tout sauvegarder avant d'essayer quoi que ce soit.

Il ya le projet pg_migrator qui, je pense, le fera pour vous, même si je ne suis pas sûr qu'il ait besoin d'applications 8.3 ou de code source.

+0

Oui je pense que quelque chose est nécessaire (source notre binaire), ne me souviens pas lequel. De plus, il semblait plus complexe à installer qu'une compilation/démarrage d'un 8.3. Merci quand même pour votre aide! – SCO

7

Les paquets postgres de Debian, et donc d'Ubuntu, ont une manière très claire de passer d'une version de Postgres à une autre. La procédure est documentée dans /usr/share/doc/postgresql-common/README.Debian comme suit:

Default clusters and upgrading 
------------------------------ 
When installing a postgresql-X.Y package from scratch, a default 
cluster 'main' will automatically be created. This operation is 
equivalent to doing 'pg_createcluster X.Y main --start'. 

Due to this default cluster, an immediate attempt to upgrade an 
earlier 'main' cluster to a new version will fail and you need to 
remove the newer default cluster first. E. g., if you have 
postgresql-8.2 installed and want to upgrade to 8.3, you first install 
postgresql-8.3: 

    apt-get install postgresql-8.3 

Then drop the default 8.3 cluster: 

    pg_dropcluster 8.3 main --stop 

And then upgrade the 8.2 cluster to 8.3: 

    pg_upgradecluster 8.2 main 

Le meilleur moment pour le faire est avant ugrading à une version d'Ubuntu où la version de Postgresql en cours d'exécution a été supprimé, c'est-à-dire dans cet exemple, alors que sur une version d'Ubuntu qui a la possibilité d'installer à la fois Postgres 8.3 et Postgres 8.4. Dans mon cas, je suis passé de jovial à karmique, amélioré de 8,3 à 8,4 puis je suis passé du karmique au lucide.

Le processus de mise à niveau décrit ci-dessus est très facile. La commande * pg_upgradecluster * arrêtera l'ancienne version, migrera les données, puis lancera la nouvelle version sur le même port que l'ancienne version, en démarrant finalement l'ancienne version sur un nouveau port.

Si vous n'avez pas migré vos données postgres 8.3 avant de passer à une version d'Ubuntu qui manque de postgres 8.3, la migration est toujours simple. Commencez par ajouter le dépôt ubuntu karmique /etc/apt/sources.list:

deb http://archive.ubuntu.com/ubuntu/ karmic main restricted universe 

Installer postgresql-8.3:

apt-get update && apt-get install postgresql-8.3 

Déposez votre cluster 8.4. Avertissement: Cela supprimera les données de votre installation postgresql 8.4 si vous en avez. Mais si vous ne faites que cela parce que vous avez besoin de mettre à jour vos 8.3 à 8.4, vous n'aurez aucune donnée dans votre cluster 8.4.

pg_dropcluster 8.4 main --stop 

Et puis mettre à niveau le cluster 08/03 au 08/04:

pg_upgradecluster 8.3 main 

Enfin, retirer la postgresql-8.3 package, et retirez la jaunty-line de /etc/apt/sources.list, puis exécutez apt-get à nouveau la mise à jour.

Comme d'habitude, faire une sauvegarde de vos répertoires postgres avant de faire tout ce qui précède est toujours une bonne idée.

Questions connexes