pg_resetxlog
est un outil de dernier recours pour faire fonctionner à nouveau votre base de données :
-
Vous avez supprimé des fichiers que vous n'auriez pas dû supprimer de pg_xlog
;
-
Vous avez restauré une sauvegarde de niveau système de fichiers qui omettait l'option pg_xlog
à cause d'une erreur de configuration du système de sauvegarde (cela arrive plus souvent qu'on ne le pense, les gens se disent "il y a log dans le nom, donc ça ne doit pas être important, je vais le laisser en dehors des sauvegardes").
-
Une corruption du système de fichiers due à une défaillance matérielle ou à une panne du disque dur a endommagé votre répertoire de données.
-
un bogue de PostgreSQL ou du système d'exploitation a endommagé les journaux d'écriture (extrêmement rare).
Comme le dit le manuel :
pg_resetxlog efface le journal d'écriture (WAL) [...]. Cette Cette fonction est parfois nécessaire si ces fichiers ont été corrompus. Cette fonction est parfois nécessaire si ces fichiers ont été corrompus. Elle ne doit être utilisée qu'en dernier recours, lorsque le serveur ne démarre pas. à cause d'une telle corruption.
Ne pas courir pg_resetxlog
à moins que vous ne sachiez exactement ce que vous faites et pourquoi vous le faites . Si vous n'êtes pas sûr, posez la question sur le site Liste de diffusion pgsql-general ou sur https://dba.stackexchange.com/ .
pg_resetxlog
peut corrompre votre base de données comme l'indique la documentation. Si vous devez l'utiliser, vous devez REINDEX
Pour ce faire, vous devez vidanger votre ou vos bases de données, réinitialiserdb et recharger vos bases de données. Ne continuez pas à utiliser le cluster endommagé. Selon la documentation :
Après avoir exécuté cette commande, il devrait être possible de mais gardez à l'esprit que la base de données peut contenir des données incohérentes en raison de transactions partiellement engagées. Vous devez immédiatement vidanger vos données, exécuter initdb et recharger. Après le rechargement, vérifiez les incohérences et réparez-les si nécessaire.
Si vous souhaitez simplement déplacer le répertoire de votre journal d'écrasement vers un autre emplacement, vous pouvez le faire :
- Arrêter PostgreSQL
- Déplacer
pg_xlog
- Ajouter un lien symbolique de l'ancien emplacement vers le nouvel emplacement
- Démarrer PostgreSQL
Ou, comme le dit le la documentation dit :
Il est préférable que le journal soit situé sur un disque différent de celui de l'application fichiers de la base de données principale. Ceci peut être réalisé en déplaçant le répertoire pg_xlog à un autre endroit (pendant que le serveur est arrêté, bien sûr) et en créant un lien symbolique à partir du répertoire ori. bien sûr) et en créant un lien symbolique à partir de l'emplacement d'origine dans le répertoire de données vers le nouvel emplacement.
Si PostgreSQL ne démarre pas, c'est que vous avez fait quelque chose de mal. N'utilisez pas pg_resetxlog
pour le "réparer". Annulez vos modifications et déterminez ce que vous avez fait de mal.