sql >> Base de Datos >  >> RDS >> PostgreSQL

Migración de Postgres a SQL Server 2008

Estaba teniendo problemas al usar el Asistente de importación en SQL Server 2008 R2 para importar tablas de PostgreSQL. Tenía instalado el controlador ODBC de PostgreSQL, así que para la Fuente de datos en el Asistente de importación, elegí "Proveedor de datos de .Net Framework para Odbc" y proporcioné el nombre DSN para mi base de datos de PostgreSQL. El asistente encontró las tablas bien, pero cuando fui a realizar la importación recibí 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 del blog de Microsoft aquí. Aparentemente, el problema es que varios controladores ODBC usan diferentes nombres de atributos al informar los metadatos de las columnas. Para que la importación funcionara, tuve que editar el archivo "ProviderDescriptors.xml", que se encontraba en

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

En el...

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

... elemento que tuve 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, tuve que modificar el MaximumLengthColumnName , NumericPrecisionColumnName y NumericScaleColumnName atribuir valores a "LENGTH" , "PRECISION" y "SCALE" , respectivamente.

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