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

PostgreSQLデータベースをSQLServerデータベースに移行する方法は?

    このServerfaultページの承認された回答でいくつかの有用な情報を見つけることができるはずです:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005年。

    データなしでスキーマを変換できる場合は、次のコマンドを使用してデータの手順を短縮できる可能性があります。

    pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
    

    この読み込みは非常に遅くなりますが、--column-inserts オプションは、データの各行に対して可能な最も一般的なINSERTステートメントを生成し、互換性がある必要があります。

    編集:スキーマの変換に関する提案は次のとおりです:

    スキーマをダンプすることから始めますが、所有権または権限に関係するものはすべて削除します。これで十分です:

    pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
    

    このファイルを編集して、BEGIN TRANSACTION;という行を追加します 最初にROLLBACK TRANSACTION; 最後まで。これで、SQLServerのクエリウィンドウでロードして実行できます。エラーが発生した場合は、ファイルの最後に移動し、ROLLBACKステートメントを強調表示して実行します(ステートメントが強調表示されているときにF5キーを押します)。

    基本的に、スクリプトが正常に実行されるまで、各エラーを解決する必要があります。次に、ROLLBACK TRANSACTIONを変更できます COMMIT TRANSACTIONへ 最後にもう一度実行します。

    残念ながら、PostgreSQLからSQL Serverに移行したことは一度もないため、どのエラーが表示されるかについては説明できません。その逆のみです。しかし、私が問題になると予想するいくつかの事柄(明らかに、完全なリストではありません):

    • PostgreSQLは、NOT NULL INTEGERをリンクすることにより、フィールドを自動インクリメントします SEQUENCEへのフィールド DEFAULTを使用する 。 SQL Serverでは、これはIDENTITYです。 列ですが、まったく同じものではありません。それらが同等かどうかはわかりませんが、元のスキーマが「id」フィールドでいっぱいの場合は、問題が発生している可能性があります。 SQLServerにCREATE SEQUENCEがあるかどうかわかりません 、そのため、それらを削除する必要がある場合があります。
    • データベース関数/ストアドプロシージャは、RDBMSプラットフォーム間で変換されません。 CREATE FUNCTIONを削除する必要があります ステートメントを作成し、アルゴリズムを手動で翻訳します。
    • データファイルのエンコードに注意してください。私はLinuxを使用しているため、Windowsでエンコードを確認する方法がわかりませんが、SQLServerが期待するものがPostgreSQLからインポートするファイルと同じであることを確認する必要があります。 pg_dump オプション--encoding=があります これにより、特定のエンコーディングを設定できます。 WindowsはUnicodeに2バイトのUTF-16エンコーディングを使用する傾向があり、PostgreSQLはUTF-8を使用することを思い出しているようです。 UTF-16の出力が原因でSQLServerからPostgreSQLに移行する際に問題が発生したため、調査する価値があります。
    • PostgreSQLデータ型TEXT 単なるVARCHAR 最大長なし。 SQL Serverでは、TEXT は...複雑です(そして非推奨です)。 TEXTとして宣言されている元のスキーマの各フィールド 適切なSQLServerデータ型を確認する必要があります。
    • SQL Serverには、UNICODE用の追加のデータ型があります データ。私は提案をするのに十分な知識がありません。問題があるかもしれないと指摘しているだけです。


    1. サブクエリを使用したOracleピボット

    2. SQLServerデータベースで主キー制約の有無にかかわらずすべてのテーブルを取得する方法-SQLServer/TSQLチュートリアル59

    3. SecurityAdvisorMySQLアラートを修正する方法

    4. Oracleデータベースで即時実行するALTER&DROPテーブルDDL