2010-08-30 9 views
6

El problema principal es la versión de la estructura de la base de datos.¿Cómo se hace un seguimiento decente de la modificación de la estructura de la base de datos por SVN?

Las utilidades estándar mysqldump y pg_dump no producen archivos muy adecuados para el control de versiones.

Los comandos de volcado generan los archivos de volcado con valores de autoincrement, entradas de tabla de contenidos, etc. Dado que estos objetos están sujetos a cambios continuos, siempre produce los archivos de gran diferencia.

PostgreSQL Dif

-- 
--- TOC entry 2630 (class 0 OID 0) 
+-- TOC entry 2549 (class 0 OID 0) 
-- Dependencies: 6 
-- Name: SCHEMA adm; Type: COMMENT; Schema: -; Owner: admin 
@@ -61,5 +61,5 @@ 

MySQL Dif

--- Dump completed on 2010-07-20 14:33:44 
+-- Dump completed on 2010-08-11 8:59:39 
Index: /db.sql 
=================================================================== 
--- /db.sql (revision 1274) 
+++ /db.sql (revision 1317) 
@@ -36,5 +36,5 @@ 
    `message` text, 
    PRIMARY KEY (`id`) 
-) ENGINE=MyISAM AUTO_INCREMENT=21122 DEFAULT CHARSET=utf8; 
+) ENGINE=MyISAM AUTO_INCREMENT=23730 DEFAULT CHARSET=utf8; 

Cualquier sugerencia/enlaces/utilidades en mejor forma de control de versiones son apreciados!

Gracias.

Respuesta

6

Tome un vistazo a LiquiBase (http://www.liquibase.org/)

Es una herramienta diseñada para permitir a los desarrolladores a enviar los cambios de base de datos a SVN, y luego aplicar con seguridad y de forma automática a la base de datos.

Los cambios se pueden realizar mediante ingeniería inversa mediante la comparación de dos bases de datos, o codificados a mano por el desarrollador y comprometidos.

También garantiza que los cambios en la base de datos se apliquen en el orden correcto y solo se apliquen una vez a una base de datos determinada.

+0

Un gran consejo. He estado buscando una solución de código abierto para el control de versiones de la base de datos. –

+0

Gracias por la sugerencia. Estaba buscando esta clase de herramienta. – Igor

6

Simplemente versionamos los scripts utilizados para crear la base de datos desde cero. Los desarrolladores editan los scripts en los archivos de texto, y no en la base de datos. Los desarrolladores no tienen acceso a los servidores de SQL de producción, y el equipo de DBA utiliza herramientas específicamente diseñadas para comparar esquemas de bases de datos (en nuestro caso, Red-Gate SQLCompare) para realizar compilaciones de producción. Crearán una nueva base de datos vacía desde los scripts y usarán la herramienta de comparación para detectar cambios. Algunos cambios se pueden aplicar automáticamente, y algunos se deben modificar manualmente.

No es un sistema perfecto, pero hasta ahora ha funcionado bastante bien.

+1

Este es el mismo método que usamos en muchos proyectos, funciona bien para nosotros, con la posible excepción de algunos desarrolladores que se quejan de tener que escribir sql para crear tablas. Normalmente les digo que no deberían depender de los diseñadores de todos modos (incluso si ahorran algo de tiempo). –

+3

Estoy de acuerdo. Si un desarrollador va a trabajar con bases de datos, debería poder escribir guiones de creación de tablas desde cero sin tener que ejercitar demasiadas células cerebrales. Si no pueden, tal vez deberían dejar la base de datos a alguien más calificado. Habiendo dicho eso, no tengo ningún problema con que alguien use la herramienta que quiera para armar el script, pero al final del día, o se registra en subversión, o no se implementa. – Mark

+0

Absolutamente de acuerdo con ustedes, incluso si todavía confiamos en IDE a veces. ¡Gracias por el consejo! – Igor

2

No utilizaría los volcados de MySQL porque se usan principalmente para la copia de seguridad de datos, y generalmente no utiliza el control de versiones para administrar copias de seguridad de datos. En cambio, solo controlaría la versión del script de instalación o el archivo SQL utilizado para configurar la estructura de la base de datos inicial.

Para proyectos pequeños, suelo tener un archivo llamado install.sql que contiene todas mis declaraciones CREATE y schema.txt que describe el esquema. Para proyectos más grandes, es posible que desee utilizar algo como dbForge, que permite versiones de esquema de base de datos en la edición profesional, aunque es un poco caro si eso es todo lo que está utilizando.

Consulte this article en Coding Horror (especialmente el primer enlace en esa publicación) para obtener más información.

+0

¡Gracias Lèse! Comprueba este artículo antes de publicar la pregunta y diría que debe volver a leerlo cuidadosamente. – Igor

2

Depesz escribió recientemente un blog el "HOW TO MANAGE CHANGES TO YOUR DATABASE?"

yo diría:

  • Si simplemente almacenar el esquema de cada objeto en el SVN, usted todavía tiene que implementar cambios de ordenar las dependencias y los datos modificaciones, por lo que todo lo que realmente te compra en sí mismo es categorizar tu historial de cambios en los objetos involucrados.
  • Escriba scripts para realizar todos los cambios, incluidos los scripts para deshacer los cambios.
  • Utilice apgdiff para producir diferencias de esquema de base de datos (PostgreSQL).
+0

¡Gracias por compartir! – Igor

2

Puede usar Another PostgreSQL Diff Tool libre para bases de datos PostgreSQL para comparar su esquema de desarrollo y esquema de producción. Simplemente actualice su base de datos de desarrollo de la forma más cómoda para hacerlo. Cuando desee actualizar la base de datos de producción al estado de la base de datos de desarrollo, descargue los esquemas de la base de datos de desarrollo y los esquemas de la base de datos de producción y permita que apgdiff los compare. Le producirá resultados que contienen sentencias DDL necesarias para transformar su base de datos de producción al estado de la base de datos de desarrollo.

De hecho, depende de usted cómo implementar apgdiff en su ciclo de desarrollo, todo lo que hace es generar resultados con sentencias DDL para "mover" su base de datos de producción al mismo estado que la base de datos de desarrollo.

En el sitio web puede encontrar información sobre cómo funciona, cómo usarlo, qué afirmaciones son compatibles, etc. También hay un artículo sobre la actualización del esquema PostgreSQL en mi blog en www.fordfrog.name (se me permitió incluir solo un enlace por lo que no podría hacer que este enlace de dirección también).

+0

¡Gracias Mioroslav por responder! Seguro que revisará tu blog. – Igor

Cuestiones relacionadas