Maintenant, j'ai lu le document sur "Transaction ID Wraparound", mais il y a quelque chose que je ne comprends vraiment pas, le document est l'url suivant http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html # VACUUM-FOR-WRAPAROUND
23.1.4. Prévention des échecs d'enveloppe d'ID de transaction
La sémantique des transactions MVCC de PostgreSQL dépend de la possibilité de comparer les numéros d'ID de transaction (XID): une version de ligne avec un XID d'insertion supérieur au XID de la transaction en cours est "à l'avenir" et ne devrait pas être visible pour la transaction en cours. Mais comme les ID de transaction ont une taille limitée (32 bits), un cluster qui s'exécute pendant une longue période (plus de 4 milliards de transactions) souffrirait d'un bouclage d'ID de transaction: le compteur XID revient à zéro, et toutes les transactions soudaines qui étaient dans le le passé semble être dans le futur - ce qui signifie que leur production devient invisible. En bref, une perte de données catastrophique. (En fait, les données sont toujours là, mais c'est un réconfort froid si vous ne pouvez pas y accéder.) Pour éviter cela, il est nécessaire de nettoyer chaque table de chaque base de données au moins une fois tous les deux milliards de transactions.
Je ne comprends pas que les déclarations "subiraient un enveloppement d'ID de transaction: le compteur XID revient à zéro, et toutes les transactions soudaines qui étaient dans le passé semblent être à l'avenir - ce qui signifie que leur sortie devient invisible"
Quelqu'un peut-il expliquer cela? Pourquoi, après que la base de données a subi un bouclage d'ID de transaction, les transactions qui étaient dans le passé semblent-elles l'être à l'avenir? En bref, je veux savoir si PostgreSQL sera dans la situation de "perte de données" après le bouclage de l'ID de transaction par autovacuum uum
Pour mes vues personnelles, nous pouvons obtenir l'ID de transaction actuel en utilisant la fonction txid_current (), la sortie est de 64 bits et ne sera pas cyclée. par la fonction txid_current (). Sauf que vous utiliserez pg_resetxlog reset reset ID de transaction après l'arrêt du serveur PostgreSQL. Ai-je raison ? Merci