sql >> データベース >  >> RDS >> PostgreSQL

PostgresからSQLServer2008への移行

    SQL Server2008R2のインポートウィザードを使用してPostgreSQLからテーブルをインポートする際に問題が発生しました。 PostgreSQL ODBCドライバーをインストールしたので、インポートウィザードのデータソースに「.NetFramework Data Provider for Odbc」を選択し、PostgreSQLデータベースのDSN名を指定しました。ウィザードはテーブルを正常に検出しましたが、インポートを実行しようとするとエラーが発生しました

    ソースデータと宛先データの列情報を取得できませんでした。

    「請求」->[dbo]。[請求]:

    –列-1が見つかりません。

    私はここのマイクロソフトのブログ投稿で解決策を見つけました。明らかに問題は、さまざまなODBCドライバーが列のメタデータを報告するときに異なる属性名を使用することです。インポートを機能させるには、

    にある「ProviderDescriptors.xml」ファイルを編集する必要がありました。

    C:\ Program Files \ Microsoft SQL Server \ 100 \ DTS \ ProviderDescriptors \ ProviderDescriptors.xml

    ...

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

    ...要素属性を変更する必要がありました...

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

    ...から...

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

    つまり、MaximumLengthColumnNameを微調整する必要がありました 、NumericPrecisionColumnName 、およびNumericScaleColumnName "LENGTH"への属性値 、"PRECISION" 、および"SCALE" それぞれ。

    その変更が行われると、PostgreSQLからSQLServerへのインポートは正常に実行されました。



    1. MariaDB JSON_MERGE()の説明

    2. PostgreSQLでpgBouncerを使用するためのガイド

    3. VSエンティティフレームワークのOracleエンティティは、コードの主キーを更新しません

    4. Oracleデータベースでパラメータを使用してPL/SQLストアドプロシージャを作成する方法