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

MSSQLからPostgreSQLへの移行-知っておくべきこと

    ご存知かもしれませんが、Microsoft SQL Serverは非常に人気のあるRDBMSであり、データベースのサイズが大きい場合、またはデータベースがかなりの数のクライアントによって使用されている場合、ライセンスが非常に制限され、所有コストが高くなります。非常にユーザーフレンドリーなインターフェースを提供し、習得が容易です。これにより、インストールされたユーザーベースが大きくなりました。

    PostgreSQLは世界で最も先進的なオープンソースデータベースです。 PostgreSQLコミュニティは非常に強力であり、既存の機能を継続的に改善し、新しい機能を実装しています。 db-engineの人気ランクによると、PostgreSQLは2017年のDBMSでした。

    MS SQLServerからPostgreSQLに移行する理由

    1. MS SQL ServerはMicrosoft独自のデータベースですが、PostgreSQLはオープンソース開発者のグローバルコミュニティによって開発および保守されています。コストが問題になる場合は、間違いなくPostgreSQLを使用する必要があります。価格はこちらで確認できます。
    2. PostgreSQLはクロスプラットフォームのデータベースエンジンであり、Windows、Mac、Solaris、FreeBSD、およびLinuxで使用できますが、SQLServerはWindowsオペレーティングシステムでのみ実行されます。ご存知かもしれませんが、PostgreSQLはオープンソースで完全に無料ですが、MSSQLServerのコストはユーザー数とデータベースサイズによって異なります。
    3. 柔軟なオープンソースライセンスと、AWS、Googleクラウドなどのパブリッククラウドプロバイダーからの簡単な可用性
    4. パフォーマンスを向上させるためのオープンソースアドオンのメリット。

    知っておくべきこと

    Microsoft SQL ServerデータベースとPostgreSQLデータベースはどちらもANSI-SQLに準拠していますが、SQL構文、データタイプ、大文字と小文字の区別には違いがあり、データの転送はそれほど簡単ではありません。

    移行する前に、MSSQLとPostgreSQLの違いを理解してください。両方のデータベースには多くの機能があるため、MSSQLとPostgreSQLでのこれらの機能の動作を知っておく必要があります。移行前に知っておくべき重要な違いを確認してください。

    データ型マッピング

    一部のMSSQLのデータ型はPostgreSQLのデータ型と直接一致しないため、対応するPostgreSQLのデータ型に変更する必要があります。

    以下の表を確認してください。

    Microsoft SQL Server PostgreSQL
    BIGINT 64ビット整数 BIGINT
    BINARY(n) 固定長のバイト文字列 BYTEA
    ビット 1、0またはNULL ブール値
    CHAR(n) 固定長の文字列、1 <=n <=8000 CHAR(n)
    VARCHAR(n) 可変長の文字列、1 <=n <=8000 VARCHAR(n)
    VARCHAR(max) 可変長の文字列、<=2GB テキスト
    VARBINARY(n) 可変長バイト文字列、1 <=n <=8000 BYTEA
    VARBINARY(max) 可変長バイト文字列、<=2GB BYTEA
    NVARCHAR(n) 可変長UnicodeUCS-2文字列 VARCHAR(n)
    NVARCHAR(max) 可変長UnicodeUCS-2データ、<=2GB テキスト
    テキスト 可変長文字データ、<=2GB テキスト
    NTEXT 可変長UnicodeUCS-2データ、<=2GB テキスト
    倍精度 倍精度浮動小数点数 倍精度
    FLOAT(p) 浮動小数点数 倍精度
    整数 32ビット整数 INTEGER
    NUMERIC(p、s) 固定小数点数 NUMERIC(p、s)
    日付 日付には年、月、日が含まれます 日付
    DATETIME 分数付きの日付と時刻 TIMESTAMP(3)
    DATETIME2(p) 分数付きの日付と時刻 TIMESTAMP(n)
    DATETIMEOFFSET(p) 分数とタイムゾーンを含む日付と時刻 TIMESTAMP(p)WITH TIME ZONE
    SMALLDATETIME 日付と時刻 TIMESTAMP(0)
    TINYINT 8ビット符号なし整数、0〜255 SMALLINT
    UNIQUEIDENTIFIER 16バイトのGUID(UUID)データ CHAR(16)
    ROWVERSION 自動更新されたバイナリデータ BYTEA
    SMALLMONEY 32ビットの通貨額 お金
    画像 可変長のバイナリデータ、<=2GB BYTEA
    今日のホワイトペーパーをダウンロードするClusterControlを使用したPostgreSQLの管理と自動化PostgreSQLの導入、監視、管理、スケーリングを行うために知っておくべきことについて学ぶホワイトペーパーをダウンロードする

    MSSQLServerとPostgreSQLの非互換性

    MSSQLServerとPostgreSQLには多くの非互換性があります。それらのいくつかをここで確認できます。拡張機能を作成することでそれらを自動化できるため、PostgreSQLの場合と同じようにMS SQL Server機能を使用でき、時間を節約できます。

    DATEPART

    PostgreSQLではDATEPARTをDATE_PARTに置き換える必要があります。

    MS SQL:

    DATEPART( datepart , date )

    PostgreSQL:

    date_part( text , timestamp )
    date_part( text , interval )

    ISNULL

    PostgreSQLではISNULL関数をCOALESCE関数に置き換える必要があります。

    MS SQL Server:

    ISNULL(exp, replacement)

    PostgreSQL:

    COALESCE(exp, replacement)

    スペース

    MS SQL ServerのSPACE関数は、PostgreSQLのREPEAT関数に置き換える必要があります。

    MS SQL Server:

    SPACE($n)

    ここで、$nは返されるスペースの数です。

    PostgreSQL:

    REPEAT(‘ ’, $n)

    DATEADD

    PostgreSQLはMSSQLServerと同様のDATEADD関数を提供していません。間隔リテラルで日時演算を使用して、同じ結果を得ることができます。

    MS SQL Server:

    --Add 2 day to the current date
    SELECT DATEADD(day, 2, GETDATE());

    PostgreSQL:

    --Add 2 day to the current date
    SELECT CURRENT_DATE + INTERVAL ‘2 day’;

    文字列の連結

    MS SQL Serverは文字列の連結に「+」を使用しますが、PostgreSQLは同じものに「||」を使用します。

    MS SQL Server:

    SELECT FirstName + LastName FROM employee;

    PostgreSQL:

    SELECT FirstName || LastName FROM employee;

    CHARINDEX

    PostgreSQLにはCHARINDEX関数があります。この関数は、PostgreSQLの同等のPOSITION関数に置き換えることができます。

    MS SQL Server:

    SELECT CHARINDEX('our', 'resource');

    PostgreSQL:

    SELECT POSITION('our' in 'resource');

    GETDATE

    GETDATE関数は、現在の日付と時刻を返します。 PostgreSQLにはGETDATE関数はありませんが、同じ目的でNOW()関数があります。 GETDATE関数が複数回出現する場合は、拡張機能を使用してそれらを自動化できます。拡張機能を使用してモジュールを作成する方法を確認してください。

    MS SQL Server:

    SELECT GETDATE();

    PostgreSQL:

    SELECT NOW();

    ツール

    いくつかのツールを使用して、MSSQLServerデータベースをPostgreSQLに移行できます。使用する前にツールをテストしてください。

    1. Pgloader

      pgloaderツールを使用して、MSSQLデータベースをPostgreSQLに移行できます。 pgloaderのコマンドは、MSSQLデータベースからデータをロードします。 Pgloaderは、インデックスの構築、主キー、外部キーの制約など、スキーマの自動検出をサポートしています。

      Pgloaderは、MSSQLデータ型をPostgreSQLデータ型に変換できるさまざまなキャストルールを提供します。

    2. Sqlserver2pgsql

      これは、MicrosoftSQLServerデータベースをPostgreSQLデータベースに可能な限り自動的に変換するためのもう1つのオープンソース移行ツールです。 Sqlserver2pgsqlはPerlで書かれています。

      Sqlserver2pgsqlツールは2つのことを行います:

      1. SQLServerスキーマをPostgreSQLスキーマに変換します
      2. すべてのデータをSQLServerからPostgreSQLに移行するためのPentahoDataIntegrator(Kettle)ジブを生成できます。これはオプションのパーツです。

    テスト

    一部の機能は両方のデータベースで同じであるため、アプリケーションと移行されたデータベースをテストすることは非常に重要ですが、動作は異なります。

    いくつかの一般的なシナリオを確認する必要があります:

    • すべてのデータベースオブジェクトが正しく変換されているかどうかを確認します。
    • DMLのすべての機能の動作が正しく機能しているかどうかを確認します。
    • サンプルデータを両方のデータベースにロードし、両方のデータベースのすべてのDMLクエリの結果を確認します。すべてのSQLの結果は同じである必要があります。
    • DMLのパフォーマンスを確認し、必要に応じて改善します。

    1. 例によるフラスコ– Postgres、SQLAlchemy、およびAlembicのセットアップ

    2. Oracleデータベースが自動コミットに設定されているかどうかを確認するにはどうすればよいですか?

    3. 2つの列に基づいて行を列に動的に変換するMysqlクエリ

    4. PostgreSQLユーザーに空白のパスワードを設定する