首页 > 解决方案 > 数据库从 Postgres 迁移到 MS SQL Servr

问题描述

我的任务是将一些数据库从 Postgres 迁移到 MS SQL Server。

我试图按照这里的链接使用 SQL Server 导入和导出向导,https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/connect-to-a- postgresql-data-source-sql-server-import-and-export-wizard?view=sql-server-ver15

我选择:“SQL Server Native Client 11.0”作为目标,“从一个或多个表或视图复制数据”。

我正在尝试将数据迁移到现有表中。

但是,当我尝试进行迁移时,出现以下错误:

迁移错误

我不是 DBA,我的 Postgres 和 SQL 技能充其量只是平庸,所以任何建议都将不胜感激!

标签: sql-serverpostgresqlmigration

解决方案


SSMS ProviderDescriptors.xml 文件未正确映射 PostgreSQL ODBC 驱动程序返回的元数据。此文件位于我的 SSMS 安装目录“C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\CommonExtensions\Microsoft\SSIS\150\ProviderDescriptors”中。

使用从这个问题MS 博客文章中收集的信息,我能够通过System.Data.Odbc.OdbcConnection ProviderDescriptor下面的配置部分成功地从 PostgreSQL 导入。我更改了MaximumLengthColumnName,NumericPrecisionColumnNameNumericScaleColumnName中的属性值System.Data.Odbc.OdbcConnection ColumnSchemaAttributes以匹配 PosgreSQL ODBC 驱动程序返回的实际名称(LENGTH, 和PRECISION, SCALE)。

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

    <dtm:SchemaNames
        TablesSchemaName="Tables"
        ColumnsSchemaName="Columns" 
        ViewsSchemaName="Views" 
    />

    <dtm:TableSchemaAttributes
        TableCatalogColumnName="TABLE_CAT"
        TableSchemaColumnName="TABLE_SCHEM"
        TableNameColumnName="TABLE_NAME"
        TableTypeColumnName="TABLE_TYPE"
        TableDescriptor="TABLE"
        ViewDescriptor="VIEW"
        SynonymDescriptor ="SYNONYM"
        NumberOfTableRestrictions="3"
    />

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

    <dtm:Literals
        PrefixQualifier="&quot;"
        SuffixQualifier="&quot;"
        CatalogSeparator="."
        SchemaSeparator="."
    />
</dtm:ProviderDescriptor>

您可能希望保存原始ProviderDescriptors.xml文件并在完成导入任务后恢复到它。


推荐阅读