2009-09-02 11 views
14

J'ai regardé autour et je n'arrive pas à trouver quelque chose qui réponde à cette question spécifique.migrer des données de MS SQL à PostgreSQL?

Quelle est la manière la plus simple de déplacer des données d'une base de données MS SQL Server 2005 vers une installation de Postgres (8.x)? J'ai examiné plusieurs utilitaires comme "Full Convert Enterprise", etc, et ils échouent tous pour une raison ou une autre, allant des erreurs étranges qui font sauter à l'insertion de null plutôt que de données réelles (wth?) .

Je regarde un DB avec toutes les tables, sauf pour une seule vue, pas stockées procs, fonctions, etc.

À ce stade, je suis sur le point d'écrire un petit utilitaire pour le faire pour moi, Je ne peux pas croire que c'est nécessaire. Sûrement quelque chose quelque part qui peut le faire? Je ne suis même pas trop inquiet au sujet du coût, bien que libre soit préférable :)

Répondre

6

Jetez un oeil à la Software Catalogue. Sous Administration/development tools je vois DBConvert for MS SQL & PostgreSQL. Probablement, il existe d'autres outils similaires répertoriés.

+1

parfait, c'est exactement ce que je cherchais. Je l'ai pris pour un essai routier, je l'ai aimé alors j'ai acheté la version complète et ça fonctionne comme un champion. Pour ceux qui ne recherchent pas cette solution spécifique, mais des solutions similaires, ils offrent des outils de conversion et de synchronisation entre MSSQL, Postgres, Oracle, MS Access, Firebird, etc. Je ne peux parler que des conversions MSSQL/Postgres, mais Si ces conversions sont une indication, ce logiciel vaut bien 79 $. – Fred

+0

@Milen A. Radev, +1 Super! – Meem

-1

Eh bien, il existe des liaisons .NET pour MS SQL Server 2005 (évidemment) et aussi pour PostgreSQL. Il suffirait donc de quelques lignes de code pour coder un programme qui pourrait transférer des données en toute sécurité de l'une à l'autre. La vue doit probablement être effectuée manuellement car Postgres n'utilise pas le même langage pour les vues que SQL Server.

+0

Oui, mais cela va nécessiter beaucoup de maintenance pour rester au fil du temps, je préférerais quelque chose qui ne m'oblige pas à plonger dans le code chaque fois que le schéma DB change. et si je le rends générique alors ça devient pas si simple que maintenant je dois prendre des décisions basées sur des types de données, etc. – Fred

+0

Eh bien, je ne pense pas qu'il y aura un chemin facile. Voir ici http://wiki.postgresql.org/wiki/Microsoft_SQL_Server_to_PostgreSQL_Migration_by_Ian_Harding pour certains des problèmes impliqués. Il est beaucoup plus probable que vous serez en mesure de coder quelque chose qui fonctionne dans votre situation que quelqu'un sera en mesure de créer un outil qui fonctionne pour tous. –

4

Vous pouvez utiliser la fonctionnalité MS DTS (renommée SSIS dans la dernière version je pense). Un problème avec le DTS est que j'ai été incapable de le faire commettre après chaque ligne lors du chargement des données dans pg. Ce qui est bien si vous avez seulement quelques lignes de 100k ou plus, mais c'est vraiment très lent.

Je finis généralement par écrire un petit script qui extrait les données de SQLServer au format CSV, puis utilise COPY WITH CSV du côté de PostgreSQL.

Les deux ne prennent soin que des données. Prendre soin du schéma est un peu plus difficile, car les types de données ne sont pas forcément mappés directement. Mais il peut facilement être écrit avec une charge statique du schéma. Si le schéma est simple (juste des types de données varchar/int par exemple), cette partie peut aussi être facilement scriptée à partir des données dans INFORMATION_SCHEMA.

Questions connexes