この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
用の追加のデータ型があります データ。私は提案をするのに十分な知識がありません。問題があるかもしれないと指摘しているだけです。