2009-02-04 13 views
12

He estado buscando las opciones para obtener nuestros esquemas de base de datos bajo control de versión. Parece que la gente de Ruby tiene Rails Migrations, y las personas .NET tienen algunas opciones (por ejemplo this, this y this). ¿Qué hay de Perl?¿Cómo puedo obtener mi base de datos bajo control de versión con Perl?

He visto esto thread on PerlMonks que no tiene mucho, aunque menciona DBIX::Migration::Directories. ¿Alguien realmente está usando este módulo, o algún otro módulo? ¿O lanzas tus propias soluciones de migración de bases de datos?

detalles Gratuitous:

  • Nos No uso DBIx :: Clase en su mayor parte
  • Utilizamos MySQL
  • Utilizamos SVN

Respuesta

3

En POPFile usamos nuestra propia solución. Almacenamos un número de versión de esquema en el db y si el programa detecta que hay un esquema más nuevo, actualizará el db en consecuencia. Esta no es exactamente la mejor y más divertida parte de nuestro código.

Para ser sincero, no veo la ventaja de utilizar DBIx :: Migration :: Directories si aún no está utilizando DBIx :: Class. Debe proporcionar el SQL y los números de versión y el manejador de la base de datos. También podría proporcionar un poco más de código para encontrar el archivo sql y alimentarlo a la base de datos.

Por supuesto, tener el esquema en control de versiones es una gran ventaja.

6

Un proyecto muy interesante en el que probablemente todavía es un poco joven confiar es en el ORLite::Migrate de Adam Kennedy que toma su inspiración de las migraciones de Rails. Él wrote up a very interesting journal en use.perl.org sobre sus planes y espero vigilarlo para el futuro.

Parece que este paquete solo funciona con SQLite por el momento, pero creo que Adam planea construir esto para ser más agnóstico de la base de datos en el futuro.

+1

A partir del 27/04/12, todavía parece ser compatible con SQLite. –

3

Usamos un sistema similar al descrito por Manni. Los dos grandes desventajas son:

  • No se puede revertir los cambios de esquema (por lo general esto es raro, no muy probado y difícil de todos modos así tener que hacerlo de forma manual no es un gran problema OMI).

  • Usar un número de versión secuencial es un problema cuando se desarrolla en múltiples ramas, ya que está utilizando SVN, no es probable que sea un problema como si estuviera usando git embargo. :-)

El guión guión que utilizo es aquí: database_update y hay una pequeña example data file.

7

En el trabajo, utilizamos una versión modificada de DBIx::Migration (tiene algunas limitaciones, como no más de 10 migraciones). Luego, tiene un esquema central que ha descartado de su base de datos y, cuando el número de versión es muy bajo, actualiza su base de datos utilizando las migraciones del directorio de esquema de migración.

También recomiendo encarecidamente el libro Database Refactoring.Entre otras cosas, le brindará excelentes técnicas para administrar las migraciones de forma segura de forma que si necesita retroceder, no pierde datos (como cuando suelta una columna que cree que no necesita) .

Para ayudar con los programas de desactivación automática que sugiere, he escrito Devel::Deprecate para que no tenga que recordar cuándo hacer las depreciaciones. Su código se quejará en voz alta por usted (y solo en las pruebas, no en la producción).

Importante: Encontrará periódicamente que va a aplicar tantos niveles de migración de base de datos con esta técnica que usted va a veces es necesario "subir" la migración de base mínima, ya que toma mucho tiempo para reconstruir la base de datos. Simplemente tome un nuevo volcado de la base de datos en el nivel de migración deseado y elimine todas las migraciones inferiores o iguales a ese nivel.

actualización: Avance rápido de unos años y hoy me recomiendan sqitch. Está diseñado desde cero para manejar el caso de poner una base de datos bajo control de versiones sin vincularlo a un lenguaje de programación particular o VCS.

0

Hay un módulo de CPAN interesante (Database::Migrator). Lo he usado y funciona bien para manejar las migraciones de su proyecto.

Cada migración va a su propio directorio. Las migraciones se aplican en orden ordenado, normalmente las nombra comenzando con un prefijo numérico. El directorio de migración puede contener archivos con SQL o Perl.

3

¿Qué tal ? Se anuncia a sí mismo como una "aplicación de gestión de cambio de base de datos",

Cuestiones relacionadas