2008-09-17 19 views
53

Si tengo una gran cantidad de bases de datos SQLite, todas con el mismo esquema, ¿cuál es la mejor manera de unirlas para realizar una consulta en todas las bases de datos?¿Cómo puedo fusionar muchas bases de datos SQLite?

Sé que es posible utilizar ATTACH para hacer esto, pero tiene a limit de 32 y 64 bases de datos dependiendo del sistema de memoria en la máquina.

Respuesta

2

Si solo necesita hacer esta operación de combinación una vez (para crear una nueva base de datos más grande), puede crear un script/programa que bucleará todas sus bases de datos sqlite y luego insertará los datos en su base de datos principal.

0

Sin ofender, como un desarrollador a otro, me temo que su idea parece terriblemente ineficiente. Me parece que, en lugar de unir bases de datos SQLite, probablemente deba almacenar varias tablas dentro del mismo archivo de Base de Datos.

Sin embargo, si me equivoco, supongo que podría ADJUNTAR las bases de datos y luego usar una VISTA para simplificar sus consultas. O bien, cree una tabla en la memoria y copie todos los datos (pero aún peor en cuanto al rendimiento, especialmente si tiene bases de datos grandes)

+0

La fusión de dos bases de datos es útil cuando un ingeniero de bases de datos trabaja con una copia diferente para modificar la estructura o el contenido de ciertas maneras, y mientras tanto, los usuarios modifican la versión anterior. – Beejor

4

También puede usar un software diff/merge para realizar el trabajo. Puede probar SQLite Compare, admite comparar y combinar grandes tablas SQLite, entre otras cosas.

buena suerte

Liron

+0

http://download.cnet.com/3001-10254_4-10964767.html?spi=5484e22b6319e24014aac6ce19f95e93 – JustCurious

50

Para resumir de la Nabble post en la respuesta de DavidM:

attach 'c:\test\b.db3' as toMerge;   
BEGIN; 
insert into AuditRecords select * from toMerge.AuditRecords; 
COMMIT; 
detach toMerge; 

Repita según sea necesario.

Nota: se agregó detach toMerge; según el comentario de mike.

+5

y también 'separe aMerge;' * después * de confirmar. – mike

+2

Esto solo fusionaría una mesa, supongo. ¿Cómo importaría varias tablas a la vez, preservando su clave externa? – ILoveCoding

+0

Intenté esto, pero las columnas del archivo adjunto db estaban desalineadas por algún motivo y el resultado fue incorrecto. Por lo tanto, tuve que indicar explícitamente los nombres de columna en el mismo orden en las instrucciones INSERT y SELECT. –

Cuestiones relacionadas