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

PostgreSQL移行用のトップオープンソースツール

    データベースの移行は、サービスまたはツールを使用して、1つ以上のソースデータベースから1つ以上のターゲットデータベースにデータを移行するプロセスです。移行にはさまざまな種類があります。テクノロジーから別のテクノロジー、別のデータセンター、クラウドに移行したり、同じ場所で同じテクノロジーを別のマシンに移行したりすることもできます。 PostgreSQLの移行に最適なツールは、移行の種類と可用性やダウンタイムの許容範囲などの要件によって異なり、作業を行うのに最適なツールを見つけるのが難しい場合があります。

    このブログでは、PostgreSQL移行用のいくつかのオープンソースツールについて、各オプションの概要とともに説明します。

    移行ツールのバックアップと復元

    これは、データ移行を実行するための最も簡単な方法ですが、目標復旧時間(RTO)の観点からも最も時間がかかります。この方法を使用すると、現在のデータベースからバックアップを作成することになります。別のバージョンまたはインフラストラクチャでデータベースを復元し、ダンプをコピーして、新しいサーバーで復元する場合は、おそらく論理バックアップです。データの量によっては、かなりの時間がかかる場合がありますが、これがデータベースを移行するための基本的な方法です。このためのいくつかのツールを見てみましょう。

    pgdump / pgdumpall

    pg_dumpは、単一のPostgreSQLデータベースをバックアップするためのユーティリティです。他のユーザーをブロックしないため、データベースが同時に使用されている場合でも、一貫したバックアップを作成します。クラスタ全体をバックアップする場合、またはクラスタ内のすべてのデータベースに共通するグローバルオブジェクト(ロールやテーブルスペースなど)をバックアップする場合は、代わりにpg_dumpallを使用する必要があります。

    ダンプは、スクリプトまたはアーカイブファイル形式で出力できます。スクリプトダンプは、データベースを保存時の状態に再構築するために必要なSQLコマンドを含むプレーンテキストファイルです。他のマシン、他のアーキテクチャ、または他のSQLデータベース製品でデータベースを再構築するために使用できます。

    pg_basebackup

    pg_basebackupは、実行中のPostgreSQLデータベースクラスターのベースバックアップを作成するために使用されます。バックアップは他のデータベースクライアントに影響を与えることなく作成され、PITR(Point-In-Time-Recovery)とストリーミングレプリケーションスタンバイサーバーの開始点の両方に使用できます。サーバーがバックアップモードに自動的に出入りすることを確認しながら、データベースクラスターのファイルの正確なコピーを作成します。バックアップは常にデータベースクラスター全体で行われます。個々のデータベースまたはデータベースオブジェクトをバックアップすることはできません。

    pgBackRest

    pgBackRestは、従来のpg_basebackupツールと比較していくつかの改善を加えた物理バックアップを作成するオープンソースのバックアップツールです。 pgBackRestを使用して、既存のバックアップを使用してストリーミングレプリケーションの初期データベースコピーを実行するか、デルタオプションを使用して古いスタンバイサーバーを再構築できます。

    最も重要なpgBackRest機能のいくつかは次のとおりです。

      並列バックアップと復元 ローカルまたはリモート操作
    • 完全、増分、および差分バックアップ
    • バックアップローテーションとアーカイブの有効期限 バックアップの整合性チェック バックアップの履歴書 デルタ復元 暗号化

    PostgreSQL移行ツール

    バックアップツールを使用する代わりに、さまざまな方法でこの移行をより高速に実行するためのさまざまなユーティリティがあります。 ETLアプローチを使用することも、抽出-変換-読み込みに関する同じ概念を使用して異なるデータベーステクノロジ間のレプリケーションを構成することもできます。これらのツールのいくつかを見てみましょう。

    pg_chameleon

    pg_chameleonは、MySQLからPostgreSQLへのレプリカシステムです。 MySQLレプリケーションプロトコルに接続して、PostgreSQLでデータ変更をレプリケートできます。ユーザーがMySQLとPostgreSQLの間に永続的なレプリカを設定する必要がある場合でも、エンジンの移行を実行する必要がある場合でも、pg_chameleonはこのタスクに適したオプションです。

    主な機能は次のとおりです。

    • 複数のMySQLスキーマから読み取り、それらをターゲットPostgreSQLデータベースに復元します
    • MySQLスレーブとして機能するようにPostgreSQLをセットアップします
    • 基本的なDDLサポート(CREATE / DROP / ALTER TABLE、DROP PRIMARY KEY / TRUNCATE、RENAME)
    • エラーを生成するテーブルはレプリカから自動的に除外されます 単一のテーブルまたは単一のスキーマを更新する可能性 移行サポートのためにMySQLからレプリカを切り離します データ型のオーバーライド デーモン化されたinit_replicaプロセス
    • 2つの別々のサブプロセスを持つデーモン化されたレプリカプロセス。1つは読み取り用、もう1つは再生用です

    pgloader

    pgloaderは、さまざまなソースからPostgreSQLにデータをロードします。読み取ったデータをその場で変換し、ロードの前後に生のSQLを送信できます。 COPY PostgreSQLプロトコルを使用してデータをサーバーにストリーミングし、reject.datファイルとreject.logファイルのペアを入力することでエラーを管理します。

    データベースソースから直接データをロードできるため、pgloaderは他の製品からPostgreSQLへの移行もサポートしています。この操作モードでは、pgloaderは、単一の無人コマンドで移行のスキーマ部分とデータ部分の両方を処理し、継続的な移行を実装できるようにします。

    主な機能は次のとおりです。

    • CSV、db3、IBMIXFファイルなどの多くのソース形式がサポートされています
    • オンザフライのデータ変換 フルフィールドプロジェクション
    • 圧縮ファイル(zip、tar、gzip)からの読み取り
    • HTTP(S)サポート
    • ターゲットスキーマの検出 エラー時に次のオプションを停止/再開
    • SQLコマンドの前後
    • 1つのコマンドによる移行
    • スキーマの発見 ユーザー定義のキャストルール テーブルを含む/除外する部分的な移行 スキーマまたはデータのみ
    • マテリアライズド・ビュー、またはオンザフライでのスキーマの書き換え
    • 継続的な移行

    Ora2Pg

    Ora2Pgは、OracleまたはMySQLデータベースをPostgreSQL互換スキーマに移行するために使用される無料のツールです。現在のデータベースを接続してスキャンし、その構造またはデータを抽出してから、PostgreSQLデータベースにロードできるSQLスクリプトを生成します。

    主な機能は次のとおりです。

    • データベーススキーマ(テーブル、ビュー、シーケンス、インデックス)全体を、一意のプライマリキーと外部キーおよびチェック制約を使用してエクスポートします
    • ユーザーとグループの助成金/特権をエクスポート 範囲/リストのパーティションとサブパーティションをエクスポートする
    • テーブル選択をエクスポートします(テーブル名を指定します)。
    • 事前定義された関数、トリガー、プロシージャ、パッケージ、およびパッケージ本体をエクスポートします
    • 完全なデータをエクスポートするか、WHERE句に従います
    • PGBYTEAとしてのOracleBLOBオブジェクトの完全サポート
    • OracleビューをPGテーブルとしてエクスポート
    • Oracleユーザー定義型のエクスポート
    • PLSQLコードからPLPGSQLへの基本的な自動変換を提供します
    • Oracleテーブルを外部データラッパーテーブルとしてエクスポート
    • マテリアライズドビューのエクスポート
    • Oracleデータベースのコンテンツの詳細なレポートを表示する
    • Oracleデータベースの移行コスト評価
    • Oracleデータベースの移行の難易度の評価
    • ファイルからのPL/SQLコードの移行コスト評価 ファイルに格納されているOracleSQLクエリの移行コスト評価
    • Penthalo Data Integrator(Kettle)で使用するXMLktrファイルを生成します
    • Oracleロケーターと空間ジオメトリをPostGisにエクスポート
    • DBLINKをOracleFDWとしてエクスポート
    • 類義語をビューとしてエクスポート
    • DIRECTORYをexternal_file拡張子の外部テーブルまたはディレクトリとしてエクスポートします
    • Oracleデータベースと同じように完全なMySQLエクスポート

    PentahoやTalenなど、利用可能なETLオプションは他にもありますが、それらは移行よりもデータ統合またはデータ管理を対象としているため、広範なブログ投稿を避けるために、ここではそれらについて説明しません。詳細については、こちらをご覧ください。

    移行のためのPostgreSQL論理レプリケーション

    論理レプリケーションは、レプリケーションID(通常は主キー)に基づいて、データオブジェクトとその変更をレプリケートする方法です。これは、1つ以上のサブスクライバーがパブリッシャーノード上の1つ以上のパブリケーションをサブスクライブするパブリッシュアンドサブスクライブモードに基づいています。

    パブリケーションは、テーブルまたはテーブルのグループから生成された一連の変更です(レプリケーションセットとも呼ばれます)。パブリケーションが定義されているノードは、パブリッシャーと呼ばれます。サブスクリプションは、論理レプリケーションのダウンストリーム側です。サブスクリプションが定義されているノードはサブスクライバーと呼ばれ、サブスクライブする別のデータベースおよび一連のパブリケーション(1つ以上)への接続を定義します。購読者は、購読している出版物からデータを取得します。

    このメソッドは、PostgreSQLデータベースの移行またはアップグレードに使用できます。

    詳細については、ダウンタイムなしでPostgreSQLをアップグレードすることに関する対応するブログ投稿を参照してください。

    結論

    1つ(または複数)のソースからターゲット(または複数)にデータを移動または変換するため、移行は困難でリスクの高いタスクです。ターゲットが別のエンジン。したがって、詳細な手順を含む適切な計画と、もちろん、移行のすべての段階をテストするためのテスト環境が必要になります。このブログでは、このタスクに役立ついくつかのツールについて説明しました。最適な選択は、システムの可用性に関する要件によって異なります。


    1. サブクエリでビット単位のORを集約

    2. SQL Server認証とWindows認証:どちらをいつ使用するか

    3. OracleのRRとYY

    4. SQLServerデータベースの主キー制約とは-SQLServer/T-SQLチュートリアルパート54