PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Migrando do Postgres para o SQL Server 2008


Eu estava tendo problemas ao usar o Assistente de Importação no SQL Server 2008 R2 para importar tabelas do PostgreSQL. Eu tinha o driver ODBC PostgreSQL instalado, então para a Fonte de Dados no Assistente de Importação eu escolhi ".Net Framework Data Provider for Odbc" e forneci o nome DSN para meu banco de dados PostgreSQL. O wizard achou as tabelas ok, mas quando fui realizar a importação recebi o erro

As informações da coluna para os dados de origem e destino não puderam ser recuperadas.

“Faturamento” -> [dbo].[Faturamento]:

– Não é possível encontrar a coluna -1.

Encontrei a solução na postagem do blog da Microsoft aqui. Aparentemente, o problema é que vários drivers ODBC usam nomes de atributos diferentes ao relatar metadados de coluna. Para fazer a importação funcionar eu tive que editar o arquivo "ProviderDescriptors.xml", que estava localizado em

C:\Arquivos de Programas\Microsoft SQL Server\100\DTS\ProviderDescriptors\ProviderDescriptors.xml

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

... elemento eu tive que mudar os 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"
/>

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

Ou seja, tive que ajustar o MaximumLengthColumnName , NumericPrecisionColumnName e NumericScaleColumnName valores de atributo para "LENGTH" , "PRECISION" , e "SCALE" , respectivamente.

Depois que essa alteração foi feita, a importação do PostgreSQL para o SQL Server foi executada com êxito.