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

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

    1種類のデータベース知識だけでデータベースまたはアプリケーションをDB2からPostgreSQLに移行するだけでは不十分であるかどうかにかかわらず、2つのデータベースシステムの違いについて知っておくべきことはほとんどありません。

    PostgreSQLは、世界で最も広く使用されている高度なオープンソースデータベースです。 PostgreSQLデータベースには豊富な機能セットがあり、PostgreSQLコミュニティは非常に強力であり、既存の機能を継続的に改善し、新しい機能を追加しています。 db-engine.comによると、PostgreSQLは2017年と2018年のDBMSです。

    ご存知のように、DB2とPostgreSQLはRDBMSですが、いくつかの非互換性があります。このブログでは、これらの非互換性のいくつかを見ることができます。

    DB2からPostgreSQLに移行する理由

    1. 柔軟なオープンソースライセンスと、AWS、Googleクラウド、MicrosoftAzureなどのパブリッククラウドプロバイダーからの簡単な可用性。
    2. データベースのパフォーマンスを向上させるためのオープンソースアドオンのメリット。

    以下の画像では、PostgreSQLの人気がDB2と比較して時間の経過とともに増加していることがわかります。

    時間の経過に伴う関心

    移行評価

    移行の最初のステップは、アプリケーションとデータベースオブジェクトを分析し、両方のデータベース間の非互換性を見つけて、移行に必要な時間とコストを見積もることです。

    データ型マッピング

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

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

    IBM DB2 PostgreSQL
    BIGINT 64ビット整数 BIGINT
    BLOB(n) バイナリラージオブジェクト BYTEA
    CLOB(n) キャラクターラージオブジェクト テキスト
    DBCLOB(n) UTF-16文字のラージオブジェクト テキスト
    NCLOB(n) UTF-16文字のラージオブジェクト テキスト
    CHAR(n)、CHARACTER(n) 固定長の文字列 CHAR(n)
    CHARACTER VARYING(n) 可変長文字列 VARCHAR(n)
    NCHAR(n) 固定長UTF-16文字列 CHAR(n)
    NCHAR VARYING(n) 可変長UTF-16文字列 VARCHAR(n)
    VARCHAR(n) 可変長文字列 VARCHAR(n)
    VARGRAPHIC(n) 可変長UTF-16文字列 VARCHAR(n)
    VARCHAR(n)FOR BIT DATA 可変長バイト文字列 BYTEA
    NVARCHAR(n) さまざまな長さのUTF-16文字列 VARCHAR(n)
    GRAPHIC(n) 固定長のUTF-16文字列 CHAR(n)
    整数 32ビット整数 INTEGER
    NUMERIC(p、s) 固定小数点数 NUMERIC(p、s)
    10進数(p、s) 固定小数点数 10進数(p、s)
    倍精度 倍精度浮動小数点数 倍精度
    FLOAT(p) 倍精度浮動小数点数 倍精度
    本物 単精度浮動小数点数 本物
    SMALLINT 16ビット整数 SMALLINT
    日付 日付(年、月、日) 日付
    時間 時間(時、分、秒) TIME(0)
    TIMESTAMP(p) 分数付きの日付と時刻 TIMESTAMP(p)
    DECFLOAT(16 | 34) IEEE浮動小数点数 FLOAT

    DB2とPostgreSQLの非互換性

    DB2とPostgreSQLには多くの非互換性があり、それらのいくつかをここで見ることができます。拡張機能を作成することでそれらを自動化できるため、PostgreSQLのようにDB2機能を使用でき、時間を節約できます。 PostgreSQLでのDB2関数の動作を確認してください

    テーブルスペース

    TABLESPACE句は、新しく作成されたテーブルが存在するテーブルスペースの名前を定義します。

    DB2はTABLESPACEにIN句を使用するため、PostgreSQLではTABLESPACE句に置き換える必要があります。

    例:

    DB2:

    IN <tablespace_name>

    PostgreSQL:

    TABLESPACE <tablespace_name>

    最初のフェッチn行のみ

    DB2では、FETCH FIRST n ROWS ONLY句を使用して、n行以下を取得できます。 PostgreSQLでは、LIMIT nを使用できます。これは、FETCH FIRST nROWSONLYと同等です。

    例:

    DB2:

    SELECT * FROM EMP
     ORDER BY EMPID
     FETCH FIRST 10 ROWS ONLY;

    PostgreSQL:

    SELECT * FROM EMP
     ORDER BY EMPID
     LIMIT 10;

    デフォルトでIDとして生成

    DB2のIDENTITY列は、PostgreSQLのSerial列に置き換えることができます。

    DB2:

    CREATE TABLE <table_name> (
    <column_name> INTEGER NOT NULL
     GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20) 
    );

    PostgreSQL:

    CREATE TABLE <table_name> (
    <column_name>  SERIAL NOT NULL
    );

    SYSIBM.SYSDUMMY1から選択

    PostgreSQLには「SYSIBM.SYSDUMMY1」テーブルはありません。 PostgreSQLでは、「FROM」句なしで「SELECT」を使用できます。スクリプトを使用してこれを削除できます。

    スカラー関数:DB2とPostgreSQL

    天井/天井

    CEILまたはCEILINGは、入力以上の次に小さい整数値を返します(たとえば、CEIL(122.89)は123を返し、CEIL(122.19)は123を返します)。

    DB2:

    SELECT CEIL(123.89) FROM SYSIBM.SYSDUMMY1; 
    SELECT CEILING(123.89) FROM SYSIBM.SYSDUMMY1;

    PostgreSQL:

    SELECT CEIL(123.89) ; 
    SELECT CEILING(123.89) ;

    日付

    入力を日付値に変換します。 PostgreSQLではDATE関数をTO_DATE関数に変換できます。

    DB2:

    SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;

    PostgreSQL:

    SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;

    日付または同等の値の日(月の日)の部分を返します。出力形式は整数です。

    DB2:

    SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;

    PostgreSQL:

    SELECT DATE_PART('day', '2016- 09-21'::date);

    日付値の月の部分を返します。出力形式は整数です。

    DB2:

    SELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;

    PostgreSQL:

    SELECT DATE_PART ('month', '2016-09- 21'::date);

    POSSTR

    文字列の位置を返します。 PostgreSQLではPOSSTR関数がPOSITION関数に置き換えられています。

    DB2:

    Usage : POSSTR(<Filed_1>,<Field2>)
    SELECT POSSTR('PostgreSQL and DB2', 'and') FROM SYSIBM.SYSDUMMY1;

    PostgreSQL:

    Usage: POSITION(<Field_1> IN<Field_2>)
    SELECT POSITION('and' IN'PostgreSQL and DB2');

    ランド

    これは、0から1までの範囲の疑似ランダム浮動小数点値を返します。 PostgreSQLではRAND関数をRANDOMに置き換えることができます。

    DB2:

    SELECT RAND() FROM SYSIBM.SYSDUMMY1;

    PostgreSQL:

    SELECT RANDOM();
    今日のホワイトペーパーをダウンロードするClusterControlを使用したPostgreSQLの管理と自動化PostgreSQLの導入、監視、管理、スケーリングを行うために知っておくべきことについて学ぶホワイトペーパーをダウンロードする

    ツール

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

    1. Db2topg

      これは、ora2pgのようなDB2からPostgreSQLへの移行のための自動化ツールです。 db2pgツールのスクリプトは、DB2UDBデータベースを可能な限り変換します。このツールはDB2zOSでは機能しません。使用は非常に簡単です。スキーマのSQLダンプが必要であり、db2pgスクリプトを使用してPostgreSQLスキーマに変換します。

    2. 完全変換

      エンタープライズツールは、DB2データベースをPostgreSQLにすばやくコピーします。 Full Convertツールを使用したDB2からPostgreSQLデータベースへの変換は非常に簡単です。
      手順:

      • ソースデータベース、つまりDB2に接続します
      • オプション:変換するテーブルを選択します(デフォルトでは、選択したすべてのテーブル)
      • 変換を開始します。

    結論

    ご覧のとおり、DB2からPostgreSQLへの移行はロケット科学ではありませんが、システムの大きな問題を回避するために、以前に見たものを覚えておく必要があります。したがって、タスクに注意するだけで先に進むことができます。最先端のオープンソースデータベースに移行して、その利点を活用できます。


    1. SQLiteの列のデフォルト値を設定します:DEFAULT Constraint

    2. 関数からのテキスト出力を新しいクエリとして使用する

    3. PostgreSQLでUPSERT(MERGE、INSERT ... ON DUPLICATE UPDATE)する方法は?

    4. PL/SQLパッケージレベルのレコードタイプに関するメタデータ