目次

Search

  1. はじめに
  2. 一括取り込みデータベース

一括取り込みデータベース

一括取り込みデータベース

PostgreSQLソース

PostgreSQLソース

データベース取り込みタスクでPostgreSQLソースを使用するには、最初にソースデータベースを準備し、使用に関する考慮事項を確認してください。

ソースの準備:

データベース取り込みタスクでPostgreSQLソースを使用するには、最初にソースデータベースを準備し、使用に関する考慮事項を確認してください。
Secure Agent システム上
で、オペレーティングシステムに適したODBCドライバをインストールします。
  • Windowsでは、64ビットPostgreSQL ODBCドライバの最新バージョンをインストールします。
    1. PostgreSQL ODBCドライバをダウンロードしてインストールします。
      ソースデータベースにマルチバイト文字名のオブジェクト(テーブル名、カラム名、パブリケーション名など)が含まれている場合は、PostgreSQL Unicode ODBCドライバまたはPostgreSQL用DataDirect ODBCドライバのいずれかを使用する必要があります。この要件は、Amazon Aurora PostgreSQL、Azure Database for PostgreSQL - Flexible Server、Cloud SQL for PostgreSQL、およびRDS for PostgreSQLなどのすべてのPostgreSQLソースタイプに適用されます。Unicode互換のODBCドライバを使用しない場合、マルチバイト文字の名前が検出されると、増分ロードジョブは失敗します。
    2. PGSQL_ODBC_DRIVER環境変数を、ODBC Data Source Administrator(64ビット)によって表示されるドライバ名に設定します。
      タスクウィザードの[ソース]ページでpwx.custom.pgsql_odbc_driverカスタムプロパティを設定することにより、データベース取り込みタスクのこのドライバをオーバーライドできます。
  • LinuxまたはUNIXでは、PostgreSQL用DataDirect ODBCドライバがLinuxインストールの一部として提供されます。unixODBCドライバマネージャかiODBCドライバマネージャ、またはPostgreSQL ODBCドライバをインストールすることもできます。
    1. Linuxインストールで提供されるDataDirect ODBC for PostgreSQLドライバを使用しない場合は、unixODBCドライバマネージャまたはiODBCドライバマネージャをインストールするか、PostgreSQL ODBCドライバをインストールします。
      ソースデータベースにマルチバイト文字名のオブジェクト(テーブル名、カラム名、パブリケーション名など)が含まれている場合は、PostgreSQL Unicode ODBCドライバまたはPostgreSQL用DataDirect ODBCドライバのいずれかを使用する必要があります。この要件は、Amazon Aurora PostgreSQL、Azure Database for PostgreSQL - Flexible Server、Cloud SQL for PostgreSQL、およびRDS for PostgreSQLなどのすべてのPostgreSQLソースタイプに適用されます。Unicode互換のODBCドライバを使用しない場合、マルチバイト文字の名前が検出されると、増分ロードジョブは失敗します。
    2. PostgreSQLエントリをodbcinst.iniに追加します。
      [PGSQL] Description = ODBC for PostgreSQL Driver = Setup = Driver64 = /usr/pgsql-9.6/lib/psqlodbca.so Setup64 = /usr/lib64/libodbcpsqlS.so FileUsage = 1
    3. オプション。以下の環境変数を設定します。
      • ODBCSYSINI変数をodbcinst.iniが配置されているディレクトリに設定します。odbcinst.iniがデフォルトの/etcディレクトリに配置されている場合は、ODBCSYSINI変数を設定する必要はありません。
      • PostgreSQL ODBCドライバがインストールされているディレクトリをLD_LIBRARY_PATH変数に追加します。ドライバが/usr/lib64のデフォルトディレクトリにインストールされている場合は、LD_LIBRARY_PATH変数にパスを追加する必要はありません。
      • PGSQL_ODBC_DRIVERパラメータを、odbcinst.iniで指定したドライバ名に設定します。
      例:
      export ODBCSYSINI=/root/infaagent export LD_LIBRARY_PATH=/usr/pgsql-9.6/lib export PGSQL_ODBC_DRIVER=PGSQL
PostgreSQLデータベースシステム
で、次の設定手順を実行します。
  1. 増分ロードジョブ、初期および増分ロードジョブの場合、PostgreSQL postgresql.conf構成ファイルでwal_level=logicalパラメータが指定されていることを確認します。
    このパラメータは、PostgreSQLがログ先行書き込み(WAL)に書き込む情報の量を決定します。論理の設定によって、論理デコードのサポートに必要な情報が追加されます。
    Amazon Aurora PostgreSQLまたはAmazon RDS for PostgreSQLソースでwal_levelをlogicalに設定するには、クラスタパラメータグループでrds.logical_replicationパラメータを1に設定します。Azure Database for PostgreSQL - フレキシブル サーバ-の場合、Azureポータルの[サーバーパラメータ]ページでwal_levelパラメータをlogicalに設定します。
    Cloud SQL for PostgreSQLソースの場合は、次のアクションを実行します。
    1. パブリックIPを使用してデータベースに接続します。
      Google Cloudコンソールの
      [承認済みネットワーク]
      に必要なIPを必ず追加してください。
    2. Cloud SQL for PostgreSQLデータベースインスタンスレプリカを作成します。
    3. Cloud Shellで、ローカル管理者ユーザーとして次のコマンドを実行します。
      alter database postgres set default_transaction_read_only = off; gcloud sql connect
      database_replica
      --user=postgres --quiet; ALTER USER postgres WITH REPLICATION; CREATE USER replication_user WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD '
      password
      '; ALTER USER postgres WITH REPLICATION;
    4. Google Cloudコンソールで、次のデータベースフラグを追加します:
      • cloudsql.logical_decoding
        。値を
        on
        に設定します。
      • max_replication_slots
        .値を
        64
        に設定します。
      • cloudsql.enable_pglogical
        .値を
        on
        に設定します。
      • max_wal_senders
        。値を
        64
        に設定します。
    5. データベースインスタンスを再起動します。
  2. PostgreSQL用DataDirect ODBCドライバを使用する場合は、データベースでSCRAM-SHA-256認証方法を使用していないことを確認してください。MD5などの別の認証方法を使用します。
    PostgreSQL ODBCドライバは、SCRAM-SHA-256認証方法をサポートしています。PostgreSQL 13では、この認証方法がデフォルトの方法になりました。
  3. PostgreSQLソースを含むデータベース取り込みタスクをデプロイして実行するには、ソース接続で必要な特権を持つデータベースユーザーを指定する必要があります。次の方法でユーザーを作成し、そのユーザーに特権を付与します。
    • 初期ロードジョブの場合は、次のSQL文を使用します。
      CREATE USER
      dbmi_user
      WITH PASSWORD '
      password
      '; GRANT SELECT ON ALL TABLES IN SCHEMA
      schema
      TO
      dbmi_user
      ;
    • オンプレミスのPostgreSQLソースを使用する増分ロードジョブ、初期および増分ロードジョブの場合、次のSQL文を使用します。
      CREATE USER
      dbmi_user
      WITH PASSWORD '
      password
      ' REPLICATION;
      Amazon Aurora PostgreSQLソースとRDS for PostgreSQLソースの場合、次の文を使用します。
      CREATE USER
      dbmi_user
      WITH PASSWORD '
      password
      '; GRANT rds_replication to
      dbmi_user
      ;
      また、pgoutputプラグインを使用する場合は、次のSQL文を使用して、pgoutputパブリケーションに追加するデータベース内のテーブルの所有権を、作成した
      dbmi_user
      に付与します。
      GRANT CREATE ON DATABASE
      database
      TO
      dbmi_user
      ;
  4. 増分ロードジョブ、または初期および増分ロードジョブの論理デコード出力にwal2jsonプラグインを使用する場合は、プラグインをインストールします。
  5. 増分ロードジョブ、または初期および増分ロードジョブにpgoutputプラグインを使用する場合は、次のSQL文を使用して、データベース取り込みジョブのパブリケーションを作成します。
    CREATE PUBLICATION
    publication_name
    [FOR TABLE [ONLY]
    table_name
    [*] [,...] | FOR ALL TABLES ];
    ターゲットにレプリケートするすべてのテーブルがパブリケーションに含まれていることを確認してください。
  6. PostgreSQL 9.6ソースを使用する増分ロードジョブ、初期および増分ロードジョブの場合、postgresql.conf構成ファイルのmax_replication_slotsパラメータの値が、使用する予定の同時データベース取り込みジョブの数以上であることを確認します。
    すべてのレプリケーションスロットは、すべての同時ジョブで一意である必要があります。
  7. 増分ロードジョブ、初期および増分ロードジョブの場合、PostgreSQLソースがUTF-8エンコードを使用していることを確認します。

使用に関する考慮事項:

  • 一括取り込みデータベース
    は、あらゆるロードタイプのデータベース取り込みジョブで、オンプレミスPostgreSQL、Amazon Aurora PostgreSQL、Azure Database for PostgreSQL - Flexible Server、Cloud SQL for PostgreSQL、およびRDS PostgreSQLのPostgreSQLソースのタイプをサポートします。
  • PostgreSQLソースを持つデータベース取り込みジョブは、PostgreSQLとSQL Serverを除く任意のターゲットタイプを持つことができます。
  • 一括取り込みデータベース
    は、OracleまたはSnowflakeターゲットのみを持つ初期ロードと増分ロードの組み合わせジョブでPostgreSQLソースをサポートします。
  • 一括取り込みデータベース
    は、Google BigQueryまたはSnowflakeターゲットのみを持つあらゆるロードタイプのCloud SQL for PostgreSQLソースをサポートします。
  • 一括取り込みデータベース
    では、ソーステーブルの各行が一意であることを想定しているため、各ソーステーブルにプライマリキーを持たせることをお勧めします。
    一括取り込みデータベース
    は、プライマリキーの代わりに一意のインデックスを許可しません。プライマリキーが指定されていない場合、
    一括取り込みデータベース
    はすべてのカラムをプライマリキーの一部であるかのように扱います。
  • 一括取り込みデータベース
    は、データベース取り込み増分ロードジョブ、初期および増分ロードジョブでPostgreSQLソースのスキーマドリフトオプションをサポートしますが、次の制限があります。
    • PostgreSQLは、変更データキャプチャが有効になっているテーブルのプライマリキーの変更をサポートしていません。
    • データベース取り込みジョブは、テーブルパーティションIDが変更されたソーステーブルからのDML変更をキャプチャできません。
  • 一括取り込みデータベース
    では、PostgreSQLソースを含む増分ロードジョブで生成されたカラムはサポートされていません。生成されたカラムがソーステーブルに含まれている場合、変更データキャプチャはそれらのカラムを無視し、残りのカラムの処理を続行します。
  • タスクウィザードの
    [ソース]
    ページの
    [詳細]
    [LOBを含める]
    を選択した場合、データベース取り込みジョブで、PostgreSQL BYTEA、JSON、JSONB、TEXT、およびXMLカラムからデータをレプリケートできます。
    サポートされるターゲットタイプは、ロードタイプによって異なります。
    • 初期ロードジョブと増分ロードジョブの場合: Amazon Redshift、Amazon S3、Databricks Delta、Google BigQuery、Google Cloud Storage、Microsoft Azure Data Lake Storage Gen2、Microsoft Azure Synapse Analytics、Oracle Cloud Object Storage、およびSnowflake。
    • 増分ロードジョブの場合: Azure Event Hubs。
    • 初期ロードと増分ロードの組み合わせジョブの場合: Snowflake。
    タスクウィザードの
    [ソース]
    ページで、pwx.custom.pgsql_enable_lobsカスタムプロパティをtrueに設定した場合、データベース取り込み増分ロードジョブ、初期および増分ロードジョブは、長さ制限のないTEXT、XML、BIT VARYING、およびCHARACTER VARYINGカラムからデータをレプリケートできます。増分ロードジョブ、初期および増分ロードジョブも常に、BYTEA、JSON、およびJSONBカラムからデータをレプリケートします。
    LOBカラムデータは、LOBタイプとターゲットタイプによって異なるバイト制限よりもサイズが大きい場合、ターゲットに書き込まれる前に切り詰められます。詳細については、ソースの設定を参照してください。
  • PostgreSQL 9.6の場合、pgoutputプラグインは使用できません。
  • 初期ロードジョブの場合、
    一括取り込みデータベース
    では次のPostgreSQLデータ型はサポートされていません。
    • ABSTIME
    • 配列型
    • NAME
    • オブジェクト識別子型
    • PG_LSN
    • RELTIME
    • テキスト検索型:
      • TSQUERY
      • TSVECTOR
    • ユーザー定義型
    増分ロードジョブ、初期および増分ロードジョブの場合、
    一括取り込みデータベース
    では、初期ロードジョブでサポートされていないものに加えて、次のPostgreSQLデータ型はサポートされていません。
    • 空間タイプ
      • Box
      • Circle
      • Line
      • LSeg
      • Path
      • Point
      • Polygon
    • 無制限のさまざまなタイプ
    データベース統合
    ジョブは、これらのデータ型を持つカラムにはデプロイしたりnullをプロパゲートしたりすることはできません。
    サポートされているPostgreSQLデータ型からターゲットタイプへのデフォルトのマッピングについては、Default Data Type Mappingsを参照してください。
  • ターゲットテーブルに存在しないレコードに対してPostgreSQLソーステーブルのプライマリキー値を更新すると、そのレコードはターゲットにレプリケートされません。ただし、監視インタフェースは更新カウントを増分してプライマリキーの更新を含めます。プライマリキーの更新が実行される前にターゲットテーブルにレコードが存在する場合にのみ、データがターゲットにレプリケートされます。