Vous n'êtes pas identifié(e).
Bonjour,
pour effectuer une restauration en PITR, je souhaite savoir comment connaitre la date et l'heure de la premiere et de la derniere transaction dans un WAL.
ainsi je saurai jusqu'à quel WAL il faut que je restaure. Cela m'éviterai d'avoir à restaurer inutilement tous les WAL archivés depuis mon backup ...
Merci d'avance
Jean
Hors ligne
Il faut utiliser le paramètre recovery_target_time dans recovery.conf
Plus d'infos :
http://www.postgresql.org/docs/9.0/stat … tings.html
http://www.dalibo.org/glmf108_postgresq … tions#pitr (partie Restauration partielle)
damien clochard
http://dalibo.org | http://dalibo.com
Hors ligne
j'ai du mal poser ma question,
mon archive commande envoie les WAL sur un système de sauvegarde externe.
Lors d'une restauration je voudrais pouvoir déterminer la liste des WAL a mettre a disposition de la restaure commande pour ne pas restaurer inutilement des WAL qui ne seront pas utiles lors de la restauration PITR. Pour des raisons complexes je ne peux pas directement demande a la restaure commande de récupérer les WAL sur le système de sauvegarde externe. Il me faut donc pouvoir connaitre le datetime de la derniere transaction comprise dans un WAL. Cela est-t-il possible ?
Jean
Hors ligne
Certainement, mais aucun outil ne le fait à ma connaissance. Il faudra donc que vous le codiez.
Guillaume.
Hors ligne
Désolé pour l'incompréhension !
Effectivement comme le dit Guillaume ça doit être possible, en codant un outil d'inspection de WAL...
Un contournement consiste à modifier l'archive_command pour écrire la date dans un fichier au moment de l'archivage WAL :
Par exemple :
archive command = " echo `date` > /mnt/archivedir/"%f".date; cp "%p" /mnt/archivedir/"%f"
Du coup à chaque archivage vous aurez désormais :
* 00000001000000000000008E : le wal lui-lême
* 00000001000000000000008E.date contenant la date de l'archivage
Concrètement la date d'archivage n'est pas exactement la même que celle de la dernière transaction du wal mais ça vous donne une indication assez proche
damien clochard
http://dalibo.org | http://dalibo.com
Hors ligne
merci pour votre aide,
j'avais pensé à mettre dans le script appellé par l'archive commande quelque chose comme :
psql -Atc "select (pg_stat_file('${p}')).modification;"
Le problème est dans votre solution comme la mienne, le fait que la date récupérée est la date d'archivage du WAL et non la date de dernière transaction.
Il peu y avoir de gros écart suivant l'activité de la base.
Enfin, si on ne peut pas faire mieux ...
Hors ligne
ça ne change rien au problème mais la commande :
psql -Atc "select (pg_stat_file('${p}')).modification;"
peut être remplacée par
stat --format=%y $p
ça vous évite de déclencher un transaction supplémentaire à chaque archivage de log ;-)
damien clochard
http://dalibo.org | http://dalibo.com
Hors ligne
Merci pour le tuyau
Hors ligne
Bonjour,
la commande stat ne convient pas car elle donne l'heure a laquelle le WAL est archivé, qui peux être vraiment différente de l'heure de la derniere transaction dans le WAL.
Je veux bien essayer de coder quelque chose qui lit le contenu des WAL mais je ne connais pas la structure des WAL.
Quelqu'un sait-t-il ou la trouver ?
merci d'avance
Jean
Hors ligne
La structure est déclarée dans le code source de PostgreSQL. Nul part ailleurs à ma connaissance.
Guillaume.
Hors ligne
Je pense que l'outil xlogdump peut vous aider.
https://github.com/snaga/xlogdump/
https://github.com/snaga/xlogdump/blob/ … E.xlogdump
Dimitri Fontaine
http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support
Hors ligne