Herramientas para migrar de SQLite a PostgreSQL

11

Necesito migrar continuamente de SQLite a PostgreSQL. Por continuo, quiero decir que volveré a importar la base de datos SQLite en PostgreSQL todos los días. Sería bueno si pudiera hacer cambios en las tablas en SQLite como quisiera sin tener que hacer manualmente ningún cambio en la base de datos PostgreSQL. Ejecutaré la migración desde Python, pero podría ser cualquier herramienta externa, que se puede controlar desde la línea de comandos. La herramienta debe estar disponible para Linux, y sería bueno si también se ejecutara en Windows.

David
fuente
1
Solo para aclarar, ¿necesita migrar tanto los datos como el esquema?
h0tw1r3
1
Comprobado en la wiki de PG ?
Denis de Bernardy
¿Podría explicar por qué necesita hacer esto? Quizás haya mejores formas de abordar su problema raíz que hacer frente y convertir la base de datos. Por ejemplo, CleanFill sugirió desarrollar un ETL.
Nick Chammas
@ Nick, lo siento, pero es un caso muy especial, que requeriría mucha explicación / discusión para describirlo.
David
@David: si desea obtener más respuestas, de hecho puede ser útil resumir su caso de uso en otro párrafo lo mejor que pueda sin demasiadas explicaciones / discusiones. Tal como está, nos está pidiendo que hagamos demasiadas conjeturas. Los enlaces a otros sitios de SE siempre son útiles si nos ayudan a entender de dónde viene.
Jack dice que intente topanswers.xyz

Respuestas:

3

Estoy usando Navicat para migrar entre bases de datos (MSSQL / MySQL principalmente). Se ejecuta en Linux y Windows, pero es principalmente una herramienta GUI. Si crea un perfil, puede iniciarse desde la línea de comandos. Puede descargar una versión de prueba de 30 días.

pritaeas
fuente
Gracias por el consejo. ¿Puede ejecutar todo el proceso de migración usando una sola entrada de línea de comando?
David
1
Le sugiero que haga esta pregunta al soporte de Navicat. Son muy útiles (IMO). Según el sitio web, debería funcionar, pero nunca tuve la necesidad de probar / usar esto.
pritaeas
4

¿Has estudiado el uso de herramientas ETL? Son externos y creo que pentaho se ejecuta tanto en Windows como en Linux y es gratis. sitio de pentaho

CleanFill
fuente
Hola y bienvenidos al sitio! Sé acerca de Pentaho, pero no sabía que podría resolver esto. ¿Puede resolverlo, creo?
David
1
También estaba pensando en ETL mientras leía la pregunta, pero creo que la curva de gastos generales y de aprendizaje es bastante alta. Además, no creo que sea fácil hacer la migración "continuamente".
DrColossos
¡Gracias! Personalmente tengo más experiencia con SSIS, pero eso viene con SQL Server y tienes que pagar la licencia de SQL. Pentaho es una herramienta ETL y es capaz de migrar datos desde el origen al destino. Necesitará los controladores correctos para comunicarse con el origen / destino. Hay una pequeña curva de aprendizaje con cualquiera de las herramientas ETL, pero es otra herramienta en su caja de herramientas, ¿eh? Habrá varios pasos 1 para migrar datos, otro para migrar cambios DDL. Comenzaría con 1: solo mueva los datos (paso más fácil), una vez que lo baje, se sentirá más cómodo para continuar.
CleanFill
Por lo que parece, no estoy seguro de que usar Pentaho sea más rápido que escribirlo desde cero en Java o Python, dada la curva de aprendizaje y la complejidad de usar una nueva herramienta ETL.
David
@David: es probable que aprender una nueva herramienta ETL sea considerablemente más fácil que reinventar la rueda IMO
Jack dice que intente topanswers.xyz
2

Creo que es posible, pero no creo que mucha gente esté contenta con eso. En el caso general, PosgreSQL y SQLite tratan las definiciones de tabla de manera muy diferente.

CREATE TABLE test (trans_date date primary key);

Si vuelco el contenido de esa tabla desde SQLite, esto es lo que obtengo.

sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE test (trans_date date primary key);
INSERT INTO "test" VALUES('2011-01-01');
INSERT INTO "test" VALUES('Oh, bugger.');
COMMIT;

Creo que cada columna debería ser VARCHAR () en el lado de PostgreSQL. Puede que no sea demasiado difícil escribir un script para cambiar todos los tipos de datos SQLite a VARCHAR (). Pero se siente mucho como patear ballenas muertas por la playa.

Mike Sherrill 'Retiro del gato'
fuente
Convertir todas las columnas a VARCHAR no sería lo suficientemente bueno. Debería haber una herramienta para esto o alguna forma adecuada de hacerlo.
David
En la tabla de ejemplo anterior, puede crear una tabla con una columna de fecha en PostgreSQL, pero no puede importar ambas filas en ella. Entonces, en el caso general, no creo que nada más que VARCHAR (n) pueda funcionar.
Mike Sherrill 'Cat Recall'
¿Por qué obtienes el "Oh, cabrón"? valor de SQLite?
David
2
@David: porque SQLite le permite almacenar "Oh, bugger" en una columna de tipo "fecha". SQLite le permite almacenar casi cualquier cosa en casi cualquier columna. Ese es uno de los principales problemas al migrar SQLite a cualquier dbms que se aproxime a los estándares SQL.
Mike Sherrill 'Cat Recall'
1

Puedes usar

Kit de herramientas de migración de datos del FSE .

Lo he probado, funciona bien y le ofrece opciones para la conversión de múltiples tipos de bases de datos a múltiples tipos de bases de datos: como sqlite, mysql, mssql, oracle, postgresql y ¡muchas más!

Solo tienes que echar un vistazo a su versión de prueba / evaluación, ¡los resultados son realmente satisfactorios!

linuxeasy
fuente