2010-09-14 26 views
9

Necesito migrar una base de datos de Postgres 7 a SQL Server 2008. Estoy familiarizado con el asistente de importación y exportación de SSIS, pero no sé cómo definir la fuente de datos o definir el proveedor de datos. .Migrando de Postgres a SQL Server 2008

¿Cuál es la mejor manera de migrar Postgres a SQL Server, y cómo puedo definir fuentes de datos/controladores para postgres?

+0

Elegiría SQL Server Native Client del menú desplegable DataSources. Supongo que Postgres necesita el proveedor odbc pero no sé cómo implementarlo – reach4thelasers

+0

¿Cómo te estás conectando a Postgres actualmente? Aún no tiene una fuente de datos ODBC para la configuración de Postgres. Sí, lo necesitas. – JohnB

+0

Pregunta 1: ¿Por qué alguien querría hacer esto? Hacer eso no es solo un suicidio económico, es un suicidio técnico también. –

Respuesta

9

Le deseo la mejor de las suertes al tratar de importar desde PostgreSQL a SQL Server usando SQL Server Import and Export Wizard. Sin embargo, he leído numerosos hilos de foros con gente que tiene problemas para hacerlo funcionar. Por ejemplo:

Aquí es el hilo más útil que he encontrado sobre el tema:


Para ayudar a alguien que podría estar tratando de lograr un objetivo similar al mío. En lugar de seleccionar el “PostgreSQL OLE DB” en el origen de datos en el menú desplegable de SQL Server Asistente para importar y exportar, seleccione “Proveedor de datos de .NET Framework para ODBC”

entonces usted tiene que hacer un DSN y proporcionar un ConnectionString. Siguiendo ConnectionString trabajó para mí

Driver = {} PostgreSQL; Servidor = localhost; Puerto = 5432; Database = TestMasterMap; UID = postgres; PWD =;

Para crear un DSN, debe ir a Herramientas administrativas (orígenes de datos, ODBC) y crear un DSN de usuario. Una vez hecho esto, puede proporcionar el nombre DSN en el cuadro de texto DSN del Asistente de importación y exportación de SQL Server.


Un comentarista afirmó que funcionó, pero que él consiguió "Fuera de la memoria durante la lectura de tuplas" errores en grandes mesas. Así que para las tablas con más de 3 millones de filas, tuvo que dividir la importación en 3 millones de filas.

Además, hay un link to the native .NET provider for PostgreSQL en ese hilo.

En lo personal, si esto es algo que sólo tenía que hacer una vez, y si he entendido el esquema y los datos bastante bien, me gustaría probar:

  1. exportar los datos de PostgreSQL como archivos planos
  2. crear el esquema en SQL Server (sin restricciones) o PK
  3. utilizar el Asistente para importación/exportación de SSIS para importar los archivos planos
  4. luego crear PK y limitaciones necesarias

puede ser que le toman menos tiempo para hacer lo anterior de jugar con Asistente de SSIS de importación/exportación y PostgreSQL para el día (pero sería bueno si esas herramientas funcionaba!)

+0

Acabo de tratar de importar mis tablas como archivos CSV a SQL Server 2005 y he notado que la importación de CSV tiene errores. Simplemente no pude hacerlo funcionar debido a varios problemas. PostgreSQL importó los mismos archivos sin ningún problema así. – juzzlin

+0

Me gusta la idea de exportar los datos a CSV. Trabajar con SSIS directamente no me funcionó, especialmente porque los datos que quería exportar estaban organizados en vistas, que el controlador odbc (o SSIS en sí mismo) no parece captar. – Andre

1

Como ya he terminado de comentar la respuesta arriba, pensé en intentar SQL WorkbenchJ; tiene una función de bomba de datos que funcionó bastante bien para mí. Logré exportar datos de mi base de datos PostgreSQL a una instancia de servidor SQL.

Aquellos a los que les gustaría ejecutar esto en modo de proceso por lotes (a través de shell), he aquí cómo hacerlo: Google Groups Thread. El comando WbCopy mencionado en la discusión no está realmente documentado en ningún lugar que pueda encontrar, pero puedes generar uno a través de la interfaz de la CPU y luego cambiar lo que necesites.

1

Estaba teniendo problemas al usar el Asistente de importación en SQL Server 2008 R2 para importar tablas desde PostgreSQL. Tenía instalado el controlador PostgreSQL ODBC, por lo que para el origen de datos en el Asistente de importación elegí ".Net Framework Data Provider para Odbc" y proporcioné el nombre de DSN para mi base de datos PostgreSQL. El asistente encontró las tablas bien, pero cuando fui a realizar la importación obtuve el error

No se pudo recuperar la información de columna para los datos de origen y destino.

“Facturación” -> [dbo] [Facturación]:.

- No se puede encontrar la columna -1.

Encontré la solución en la publicación de blog de Microsoft here. Aparentemente, el problema es que varios controladores ODBC usan diferentes nombres de atributos cuando informan los metadatos de las columnas. Para obtener la importación trabajar tuve que editar el archivo "ProviderDescriptors.xml", que se encuentra en

C: \ Archivos de programa \ Microsoft SQL Server \ 100 \ DTS \ ProviderDescriptors \ ProviderDescriptors.xml

En la ...

<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection"> 

... elemento que tenía que cambiar los atributos de ...

<dtm:ColumnSchemaAttributes 
    NameColumnName = "COLUMN_NAME" 
    OrdinalPositionColumnName="ORDINAL_POSITION" 
    DataTypeColumnName = "TYPE_NAME" 
    MaximumLengthColumnName = "COLUMN_SIZE" 
    NumericPrecisionColumnName = "COLUMN_SIZE" 
    NumericScaleColumnName = "DECIMAL_DIGITS" 
    NullableColumnName="NULLABLE" 
    NumberOfColumnRestrictions="4" 
/> 

... a ...

<dtm:ColumnSchemaAttributes 
    NameColumnName = "COLUMN_NAME" 
    OrdinalPositionColumnName="ORDINAL_POSITION" 
    DataTypeColumnName = "TYPE_NAME" 
    MaximumLengthColumnName = "LENGTH" 
    NumericPrecisionColumnName = "PRECISION" 
    NumericScaleColumnName = "SCALE" 
    NullableColumnName="NULLABLE" 
    NumberOfColumnRestrictions="4" 
/> 

Es decir, que tuvieron que ajustar los MaximumLengthColumnName, NumericPrecisionColumnName y NumericScaleColumnName valores de atributos a "LENGTH", "PRECISION" y "SCALE", respectivamente.

Una vez hecho ese cambio, la importación de PostgreSQL a SQL Server se ejecutó correctamente.

+0

¡Gracias por la información! ¡Nunca lo hice funcionar! – reach4thelasers

Cuestiones relacionadas