Outils pour migrer de SQLite vers PostgreSQL

11

J'ai besoin de migrer en continu de SQLite vers PostgreSQL. Par continuellement, je veux dire que je réimporterai quotidiennement la base de données SQLite dans PostgreSQL. Ce serait bien si je pouvais apporter des modifications aux tables dans SQLite à ma guise sans avoir à apporter manuellement des modifications à la base de données PostgreSQL. J'exécuterai la migration depuis Python, mais il pourrait s'agir de n'importe quel outil externe, qui peut être contrôlé à partir de la ligne de commande. L'outil doit être disponible pour Linux, et ce serait bien s'il fonctionnait également sous Windows.

David
la source
1
Juste pour clarifier, avez-vous besoin de migrer à la fois les données et le schéma?
h0tw1r3
1
Vérifié dans le wiki PG ?
Denis de Bernardy
Pourriez-vous expliquer pourquoi vous devez le faire? Il existe peut-être de meilleures façons d'aborder votre problème racine que de copier et convertir la base de données. Par exemple, CleanFill a suggéré de développer un ETL.
Nick Chammas
@Nick Je suis désolé, mais c'est un cas très spécial, qui prendrait trop d'explications / discussions à décrire.
David
@David - Si vous voulez plus de réponses, cela peut en effet aider à résumer votre cas d'utilisation dans un autre paragraphe du mieux que vous pouvez sans trop expliquer / discuter. Dans l'état actuel des choses, vous nous demandez de faire trop de conjectures. Les liens vers d'autres sites SE sont toujours utiles s'ils nous aident à comprendre d'où vous venez.
Jack dit d'essayer topanswers.xyz

Réponses:

3

J'utilise Navicat pour migrer entre les bases de données (MSSQL / MySQL principalement). Il fonctionne sur Linux et Windows, mais est principalement un outil GUI. Si vous créez un profil, il peut être démarré à partir de la ligne de commande. Vous pouvez télécharger un essai de 30 jours.

pritaeas
la source
Merci pour le tuyau. Peut-il exécuter l'ensemble du processus de migration à l'aide d'une seule entrée de ligne de commande?
David
1
Je vous suggère de poser cette question au support Navicat. Ils sont très utiles (OMI). Selon le site Web, cela devrait fonctionner, mais je n'ai jamais eu besoin de tester / utiliser cela.
pritaeas
4

Avez-vous envisagé d'utiliser des outils ETL? Ils sont externes et je crois que Pentaho fonctionne à la fois sur Windows et Linux et c'est gratuit. le site de pentaho

CleanFill
la source
Bonjour et bienvenue sur le site! Je connais Pentaho, mais je ne savais pas que cela pourrait résoudre ce problème. Peut-il le résoudre pense-t-il?
David
1
Je pensais aussi à ETL en lisant la question, mais je pense que la courbe de frais généraux et d'apprentissage est assez élevée. De plus, je ne pense pas qu'il sera facile de faire la migration "en continu".
DrColossos
Merci! Je suis personnellement plus expérimenté avec SSIS, mais cela vient avec SQL Server et vous devez payer pour la licence SQL. Pentaho est un outil ETL et est capable de migrer des données de la source vers la destination. Vous aurez besoin des bons pilotes pour communiquer avec la source / destination. Il y a un peu de courbe d'apprentissage avec l'un des outils ETL, mais c'est un autre outil dans votre boîte à outils, hein? Il y aura plusieurs étapes 1 pour la migration des données, une autre pour la migration des modifications DDL. Je commencerais par 1 - il suffit de déplacer les données (étape la plus facile), une fois que vous les aurez réduites, vous serez plus à l'aise de continuer.
CleanFill
D'après le son de cela, je ne suis pas sûr que l'utilisation de Pentaho serait plus rapide que l'écriture à partir de zéro en Java ou en Python, étant donné la courbe d'apprentissage et la complexité de l'utilisation d'un nouvel outil ETL.
David
@David - apprendre un nouvel outil ETL est probablement beaucoup plus facile que de réinventer la roue IMO
Jack dit essayer topanswers.xyz
2

Je pense que c'est possible, mais je ne pense pas que beaucoup de gens en seraient satisfaits. Dans le cas général, PosgreSQL et SQLite traitent les définitions de table très différemment.

CREATE TABLE test (trans_date date primary key);

Si je vide le contenu de cette table depuis SQLite, voici ce que j'obtiens.

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;

Je pense que chaque colonne devrait être VARCHAR () du côté PostgreSQL. Il n'est peut-être pas trop difficile d'écrire un script pour changer tous les types de données SQLite en VARCHAR (). Mais cela ressemble énormément à donner un coup de pied aux baleines mortes sur la plage.

Mike Sherrill 'Cat Recall'
la source
Convertir toutes les colonnes en VARCHAR ne serait pas suffisant. Il devrait y avoir un outil pour cela ou une manière appropriée de le faire.
David
Dans l'exemple de tableau ci-dessus, vous pouvez créer une table avec une colonne de date dans PostgreSQL, mais vous ne pouvez pas y importer les deux lignes. Donc, dans le cas général, je ne pense pas que VARCHAR (n) puisse fonctionner.
Mike Sherrill 'Cat Recall'
Pourquoi obtenez-vous le "Oh, bougre." valeur de SQLite?
David
2
@David: Parce que SQLite vous permet de stocker "Oh, bugger" dans une colonne de type "date". SQLite vous permet de stocker à peu près tout dans n'importe quelle colonne. C'est l'un des principaux problèmes de migration de SQLite vers n'importe quel dbms qui se rapproche des normes SQL.
Mike Sherrill 'Cat Recall'
1

Vous pouvez utiliser

ESF Data Migration Toolkit .

Je l'ai essayé, cela fonctionne bien et vous offre des options de conversion de plusieurs types de bases de données en plusieurs types de bases de données: tels que sqlite, mysql, mssql, oracle, postgresql et juste beaucoup d'autres!

Vous venez aussi de jeter un œil à sa version d'essai / d'évaluation, les résultats sont vraiment satisfaisants!

linuxeasy
la source