PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 20/04/2011 12:15:51

ThuGaim
Membre

Migration postgresql 8.3 -> 9.0

Bonjour,

mon objectif est d'effectuer une migration de postgresql avec le contexte suivant :

Base de données initiale, Serveur N°1 :
  - OS : Debian 5
  - Archi : 64 bits
  - Version postgres : 8.3
  - Encoding des bases : (aucun) SLQ-ASCII

Base de données cible, Serveur N°2 :
  - OS : Debian 6
  - Archi : 64 bits
  - Version postgres : 9.0
  - Encoding des bases : UTF-8


Initialement, je pensais effectuer la procédure suivante pour effectuer cette migration :

1/ Arrêt des services pointant sur les bases de données concernés
2/ Dump des bases
3/ Encodage des dumps en UTF-8
4/ Intégration des dumps sur la nouvelle base
5/ Reprise

Néanmoins ce procédé demande une longue interruption de service (l'ensemble de la procédure prenant environ 1 heure).

Du coup, je me pose la question suivante : est -il possible d'utiliser dans cette configuration, les WAL du serveur n°1 sur le serveur n°2 pour intégrer seulement le delta d'une heure lié à la génération et à l'intégration des dumps ?

Cela ne pose-t-il pas de soucis de compatibilité lié aux différentes version de postgres et à l'encoding distinct des deux bases ?

Merci

Hors ligne

#2 20/04/2011 13:30:29

Marc Cousin
Membre

Re : Migration postgresql 8.3 -> 9.0

Non, les WALs ne sont utilisables qu'entre instances de même version majeure, et qu'entre copies physiques de la même base (pas entre une base, et le résultat de l'import de cette base).

Vous n'avez pas vraiment de solution simple pour résoudre votre problème, étant donné que vous avez en plus cette conversion de l'encoding à effectuer. Sinon, il y aurait eu des solutions pour gagner du temps (réplication slony par exemple, ou restauration en parallèle du dump).


Marc.

Hors ligne

#3 20/04/2011 13:44:10

ThuGaim
Membre

Re : Migration postgresql 8.3 -> 9.0

Merci pour cette réponse rapide,

vu que l'utilisation des WALS est impossible, postgres fournit-il un mode de log des requêtes (dans un format sql standard) engendrant une modification de la base de données ?

L'idée serait d'activer ce mode puis de rejouer les requêtes sql sur le nouveau serveur.

Hors ligne

#4 20/04/2011 13:45:04

gleu
Administrateur

Re : Migration postgresql 8.3 -> 9.0

La réplication Slony n'est vraiment pas utilisable ici à cause du problème d'encodage. À moins que ThuGaim soit sûr que les données enregistrées sont toutes en UTF-8, je prévois un max de problème (quelque soit la solution d'ailleurs). Il ne faut JAMAIS utiliser SQL_ASCII.


Guillaume.

Hors ligne

#5 20/04/2011 13:46:40

Marc Cousin
Membre

Re : Migration postgresql 8.3 -> 9.0

Non. Vous pouvez le faire avec des triggers. C'est ce que fait slony par exemple.

De toutes façons, tracer les requêtes n'est pas suffisant pour répliquer les modifications entre deux bases: le résultat des requêtes est dépendant du contexte (session) dans lequel il s'exécute. L'ordre de ces sessions est très important.

Avant de partir sur des solutions très complexes, de combien de temps disposez-vous pour migrer votre base ? Combien de temps prend le dump actuellement ? Et la restauration ?


Marc.

Hors ligne

#6 20/04/2011 13:47:21

gleu
Administrateur

Re : Migration postgresql 8.3 -> 9.0

Et pour répondre à la dernière question possible, PostgreSQL sait tracer les requêtes. Cependant, ce n'est pas suffisant. Il vous manquera de pouvoir les exécuter exactement de la même façon, avec le même parallélisme. Bref, c'est injouable.

Votre seule solution raisonnable est un dump suivi d'un restore. Et faites des tests avant car vous risquez d'avoir des soucis à cause de l'encodage.


Guillaume.

Hors ligne

#7 20/04/2011 14:04:14

ThuGaim
Membre

Re : Migration postgresql 8.3 -> 9.0

gleu a écrit :

Il ne faut JAMAIS utiliser SQL_ASCII.

Oui d'où le passage en UTF-8.
Concernant les tests, la procédure de dump et d'intégration avec le nouvel encoding se déroule correctement.

La durée d'interruption doit être inférieure à 10 minutes.

Le dump prend 18 minutes
La conversion 5 minutes 30
la restauration 12 minutes

Dernière modification par ThuGaim (20/04/2011 14:04:42)

Hors ligne

#8 20/04/2011 14:19:12

Marc Cousin
Membre

Re : Migration postgresql 8.3 -> 9.0

Ok. Vous devriez donc pouvoir faire tenir tout ça en 18 minutes environ, en ne passant pas par le disque, avec des pipes (au moins si vous utilisez un système unix).

Vous pouvez effectuer le dump, la conversion en la restauration en même temps.

Vous n'arriverez à mon avis pas à faire mieux, vu que vous devez convertir vos donnez en même temps.

Dernière modification par Marc Cousin (20/04/2011 14:19:43)


Marc.

Hors ligne

Pied de page des forums