SQL Server ( MSSQL )からPostgreSQLへの移行


デベロッパーがオープンソースデータベースを優先しているので、PostgreSQLはデータベースを移行できる良いオプションになります.オープンソースのデータベースは、多くの条件で開発者や企業に有益であることができます.
この投稿はSQL Server ( MSSQL )からPostgreSQLへの移行についてですが、その違いについてはあまり話しません.それらの違いを見るために、click here.また、この記事のステップはWindows 10用である.

移行方法


MSSQLからPostgresまでデータベースを移行できるさまざまな方法があります.MSSQLで同じデータベーススキーマを作成することで手動で行うことができます.また、データを自動的に移行するツールを使用することもできます.
手動でデータベーススキーマを移行する方法もあります.MSSQLサーバー管理Studioでスクリプトを生成し、PostgresのSQLシェルまたはpgAdminのスクリプトを実行できます.これはPostgresでデータベーススキーマを作成し、データをエクスポートする必要がありますが、MSSQLとPostgresの両方で異なるデータ型互換性のためにエラーが発生する可能性があります.
移行ツールを使用すると、スクリプト自体を生成し、Postgresのスキーマを作成するので、多くの時間を節約し、動作することができます.さまざまなマイグレーションツールがあります.
  • EnterpriseDB移行ツールキット
  • sqlserver 2 pgsql
  • 手動でのデータベーススキーマの移行


    手動でデータベースを移動するには、テーブルまたは完全なデータベースのいずれかのスクリプトを生成し、それらのスクリプトをPostgreSQLで実行できます.
    SQL Serverでデータベース用のスクリプトを生成するには、次の手順に従います.
    ステップ1:オープンMS SQL Server管理スタジオ.サーバに接続します.移行する必要があるデータベースに移動します.データベースを右クリックします.

    ステップ2 :スクリプトを生成するオブジェクトを選択します.データベース全体とすべてのデータベースオブジェクトまたは特定のデータベースオブジェクトをスクリプトに選択することもできます.

    ステップ3 :スクリプトのオプションを設定します.新しいクエリウィンドウでスクリプトを開くか、1つのファイルに1つのファイルまたは1つのオブジェクトスクリプトでスクリプトを生成できます.

    ステップ4:あなたのオブジェクトと設定と終了を確認します.スクリプトが生成されます.
    スクリプトが生成された後、PostgreSQLのSQLシェルまたはpgadminのいずれかのスクリプトを実行します.PostgreSQLデータベーススキーマが生成されます.

    マイグレーションツールキットを用いたデータベース移行


    スクリプトを生成することでデータベースを移行するのは時間がかかる.移行ツールを使用して多くの時間と労力を節約できます.いくつかの移行ツールが利用可能なデータベースを簡単に移行するために使用することができます.ここでは、EnterpriseDB's Migration Toolkitを使います.
    EnterpriseDBの移行ツールキットをwebsiteからダウンロードするか、アプリケーションスタックビルダーをシステム上で開き、インストールします.

    EnterpriseDBの移行ツールキットをインストールする手順


    Step 1 :アプリケーションスタックビルダーを開きます.スタックビルダーは、PostgreSQLをダウンロードするときにダウンロードされます.

    ステップ2 :移行ツールキットをインストールするPostgreSQLサーバーを選択します.あなたがインターネットに接続していることを確認します.

    ステップ3 :ウィザードをインストールするアプリケーションを表示します.カテゴリに登録してください.移行ツールキットをチェックし、次をクリックします.

    ステップ4:ダウンロードディレクトリを選択するように求められます.を選択し、希望のフォルダをダウンロードして、次をクリックします.移行ツールキットがダウンロードされ、インストールされます.インストール後、マイグレーションツールキットを使用できます.

    ツールキットの構築プロパティーファイル


    ツールキットソースファイルとターゲットデータベースの設定と接続情報を提供するには、プロパティファイルが必要です.
    ステップ1:ツールキットを開きます.プロパティファイル.Windowsでは、ファイルは次のようになります.C:\Program Files\edb\mtk\etcStep 2 :任意のエディタでファイルを変更します.私は個人的にVSのコードを好む.ファイルには次の情報が含まれます.
    src cdb url :ソースデータベースの接続情報を指定します.
    SRCHOCKDBHE User :ソースデータベースのユーザ名を指定します.
    src cdb password :ソースデータベースのパスワードを指定します.
    ターゲットデータベースの接続情報を指定します.
    ターゲットデータベースのユーザ名を指定します.
    ターゲットデータベースのパスワードを指定します.
    データベースのURLは、指定された形式でなければなりません.{TARGET_DB_URL|SRC_DB_URL}=jdbc:edb://host:port/database_idサンプルツールキットです.SQLデータベースをソースデータベースとし、PostgreSQLをターゲットデータベースとして設定します.

    ツールキットの設定に関する追加情報.プロパティファイルとSQL Server以外の移行用データベースについては、Building the toolkit.properties Fileを参照してください

    移行ツールキットの起動


    ツールキットの後.プロパティファイルが構成され、マイグレーションツールキットを使用してデータベースを移行する準備ができました.実行可能Runmkを使用してマイグレーションツールキットを呼び出します.バットファイル.Windowsで実行可能ファイルを見つけることができます.C:\Program Files\edb\mtk\bin移行ツールキットを起動するには、コマンドラインを開き、実行可能ファイルに移動し、次のコマンドを呼び出します.
    > .\runMTK.bat -sourcedbtype sqlserver -targetdbtype postgres [options, …] <schema_name>
    
    複数のスキーマを一度に移動するには、次のようなコンマ区切りのリストを使用してスキーマ名を指定します.
    > .\runMTK.bat -sourcedbtype sqlserver -targetdbtype postgres [options, …] <schema_name1>,<schema_name2>,<schema_name3>
    
    コマンドの-sourcetypeおよび-targettypeパラメーターについては触れないでください.デフォルトでは、移行ツールキットはソースデータベースがOracleであり、ターゲットデータベースがEDB Postgresアドバンストサーバであることを期待しています.
    マイグレーションツールキットを起動した後、SQL ServerからPostgreSQLへのデータスキーマと共にデータベーススキーマが移行されます.Postgresのテーブルとそのデータを確認できます.

    移行中に心に留めておくべきこと


    構文:データベースの移行前に、ソースとターゲットのデータベース間の構文の違いを知る必要があります.私はこのケース、そのMSSQLとPostgres.
    データ型の不一致:SQLサーバとPostgreSQLの両方に異なるデータ型があります.
    手動で移行しながら、注意しなければなりません.SQL Serverのデータ型を目的のPostgreSQLデータ型に変換するスクリプトを作成することもできます.また、CREATEスクリプトを生成してPostgresで実行する前に手動でデータを変換することもできます.
    移行ツールキットを使用すると、データキットはツールキットによって変換されます.しかし、それによってデータを挿入している間、若干のエラーがありえます.マイグレーションツールキットはデータと一緒にスキーマを移行するため、データ型を変換した後にデータを挿入した後、特定のデータ型を持つ特定の列のデータが移行ツールキットによって必要なデータ型に変換されません.
    例えば- SQLサーバにbooleanデータ型を持っていませんが、PostgreSQLではbooleanを持ちます.ブールデータはSQLサーバでビットデータ型として格納され、データは' true 'と' false 'の場合に1として挿入されます.移行ツールキットは、ビットデータ型をbooleanデータ型に変換しますが、その中に1と0を挿入している間、PostgreSQLがブール値データを真か偽かを予想してエラーをスローします.
    これを修正するには、case文を使用して1をtrue、0にfalseに変換するスクリプトを書くことができます.
    システム定義関数の不一致:MSSQLとPostgreSQLは、移行中に注意しなければならない同じことに対して異なる関数を提供します.
    例えば、現在の日付を取得するにはgetdate ()を使用します.
    UTCの日付を取得するには、mssqlでgetutcdate ()を持っていますが、Postgresでは以下のクエリを書く必要があります.
    SELECT NOW() AT time zone 'utc';
    
    私たちは、MSSQLでNewWare ()を持っており、UniqueIdentifier型のユニークな値を作成しますが、Postgresでは、拡張モジュールとしてuuidCount GenerateRange V 4 ()を使用しています.
    式がNULLである場合、指定された値を返します.
    PostgreresのMSSQLと同じ名前の関数を使用する場合は、同じ名前のユーザー定義関数を作成し、Postgresの等価関数クエリをその中に書き込むことができます.
    他にも多くの異なる機能があります.
    ケースの感度:Postgresでは、ダブルクォート("")内の任意のテーブル名やカラム名を記述すると、大文字小文字を区別します.
    例えば
    SELECT firstname FROM candidate;
    

    SELECT FirstName FROM Candidate;
    
    でも両方とも違う
    SELECT "FirstName" FROM "Candidate";
    
    文字列連結:複数のカラムからデータを連結しようとすると、MSSQLでは以下のようにクエリを書くことができます.
    SELECT firstname + ' ' + lastname AS candidatename FROM candidate;
    
    しかしPostgresでは以下のように書きます:
    SELECT firstname || ' ' || lastname AS candidatename FROM candidate;
    
    ストアドプロシージャ: Postgresのストアドプロシージャは、MSSQLと同様に動作しません.
    例- MSSQLストアドプロシージャで、複数の列を含むクエリを返す場合は、クエリ内でクエリを書き込みますが、Postgresでは、すべてのINパラメーターとOutパラメーターを記述する必要があります.
    MSSQLでストアドプロシージャを通じて複数のレコードを返すことができますが、Postgresではストアドプロシージャを使用して複数のレコードを返すことはできません.これを行うには、戻り値の型をテーブルとして関数を作成し、その中にクエリを書き込みます.
    他の非互換性もあります.前述のように、我々は移動中に念頭に置いておく必要が基本的なものです.

    結論


    PostgreSQLへの移行はオープンソースとして有益であり、複雑なデータ型を持っていますが、MSSQLには独自の機能があります.データベース間の選択は完全にユースケースに依存します.PostgreSQLへ移行する場合は、移行中の記事に記載されているデータ型、構文、その他のものを注意しなければなりません.

    あなたがこれまでに達したならば、うまくいけば、この速い概要はあなたがあなたのデータベースの移行を楽にするのを助けます。これを読んでくれてありがとう!