Utilizamos una versión ampliada de su enfoque.
Tenemos una carpeta de actualización de base de datos para cada versión, que contiene todos los scripts que forman parte de la versión. Hay un archivo de índice en la carpeta, que contiene pseudo enlaces a todos los scripts que deben ejecutarse.
Tenemos un trabajo de control de crucero que se ejecuta todas las noches para restaurar una copia de la base de datos de producción actual y luego ejecuta los scripts de actualización de la versión actual (ejecutando los scripts definidos en el archivo de índice). También hay un trabajo de CI que se ejecuta cada vez que alguien revisa algo en la carpeta de actualización para la versión actual.
Los scripts deben poder volver a ejecutarse obviamente, por ejemplo, deben verificar la existencia de algo antes de soltarlo o crearlo.
Entonces, si el archivo de cambio contiene e INSERT INTO, ¿primero verifica su existencia? SELECCIONAR ... ¿DÓNDE? ¿Qué pasa si no hay un identificador para verificar? – Tower
Supongo que realmente depende de lo que está insertando, y cuáles son las consecuencias de insertarlo dos veces. ¿Fallará debido a una restricción de índice única, o entrará, y si es así, creará datos incorrectos? Queremos garantizar la coherencia, por lo que nuestros insertos suelen estar envueltos por IF [NOT] EXISTS (SELECCIONA 1 DE X DONDE ...).A veces, la cláusula WHERE contendrá un par de campos para que coincida; si está insertando algo, debe saber cuáles son y la mayoría de las entidades tendrán algún tipo de clave natural. –