¿Cómo se realizan cambios de esquema en una base de datos en vivo sin tiempo de inactividad?
Por ejemplo, supongamos que tengo una base de datos PostgreSQL con una tabla que incluye varios datos de usuario, como direcciones de correo electrónico, etc., todos asociados con usuarios específicos. Si quisiera mover las direcciones de correo electrónico a una nueva tabla dedicada, tendría que cambiar el esquema y luego migrar los datos del correo electrónico a la nueva tabla. ¿Cómo podría hacerse esto sin detener las escrituras en la tabla original? Seguramente, mientras los datos se escriben desde la tabla anterior a la nueva, los datos nuevos se seguirán escribiendo en la tabla anterior y se perderán, ¿verdad?
Supongo que este problema surge con bastante frecuencia, pero no puedo encontrar ninguna solución estándar para tratarlo.
Este artículo aborda el problema, pero realmente no entendí el paso 3. Dice que escriba en ambas tablas y luego migre los datos antiguos de la primera tabla a la nueva. ¿Cómo se asegura de que solo está migrando datos antiguos?
(Yo uso PostgreSQL en Heroku ).
fuente
Respuestas:
Ya casi tienes tu respuesta:
En cuanto al paso 3 , use algo como esto (en una transacción):
Inserte lo que aún no está allí:
Actualice lo que ha cambiado mientras tanto:
No se tocarán nuevos datos, porque son idénticos en ambos lugares.
fuente