Comment effectuez-vous des modifications de schéma dans une base de données dynamique sans temps d'arrêt?
Par exemple, disons que j'ai une base de données PostgreSQL avec une table contenant diverses données utilisateur telles que des adresses électroniques, etc., toutes associées à des utilisateurs spécifiques. Si je souhaitais déplacer les adresses électroniques vers une nouvelle table dédiée, je devais modifier le schéma, puis migrer les données de messagerie vers la nouvelle table. Comment cela pourrait-il être fait sans arrêter les écritures sur la table d'origine? Certes, pendant que les données de l'ancienne table étaient écrites sur la nouvelle, de nouvelles données continueraient à être écrites sur l'ancienne table et seraient manquées, n'est-ce pas?
Je suppose que ce problème se pose assez souvent mais je ne trouve aucune solution standard pour le résoudre.
Cet article traite du problème, mais je ne comprenais pas vraiment l'étape 3. Il dit d'écrire dans les deux tables, puis de migrer les anciennes données de la première table vers la nouvelle. Comment vous assurez-vous de ne migrer que d'anciennes données?
(J'utilise PostgreSQL sur Heroku .)
la source
Réponses:
Vous avez presque déjà votre réponse:
En ce qui concerne l' étape 3 , utilisez quelque chose comme ceci (dans une transaction):
Insérer ce qui n'est pas encore là:
Mettez à jour ce qui a changé entre-temps:
Les nouvelles données ne seront pas touchées, car elles sont identiques aux deux endroits.
la source