すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:wal2json拡張機能を使用する

最終更新日:May 15, 2024

このトピックでは、ApsaraDB RDS for PostgreSQLが提供するwal2json拡張機能を使用して、論理ログレコードをJSON形式のファイルとしてエクスポートする方法について説明します。

前提条件

  • RDSインスタンスはPostgreSQL 10以降を実行します。

    説明

    PostgreSQL 16を実行するRDSインスタンスでは、拡張機能はサポートされていません。

  • wal_levelパラメーターはlogicalに設定されています。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。

背景情報

wal2jsonは論理的なデコード拡張です。 拡張機能を使用して、INSERTおよびUPDATEステートメントを使用して生成されたタプルにアクセスし、先行書き込みログ (WAL) によって生成されたログレコードを解析できます。

wal2json拡張機能は、トランザクションごとにJSONオブジェクトを生成します。 すべての新旧のタプルは、JSONオブジェクトで使用できます。 トランザクションのタイムスタンプ、スキーマ修飾、データ型、トランザクションIDなどのプロパティを含むその他のオプションもJSONオブジェクトで使用できます。 詳細については、「SQL文を実行してJSONオブジェクトを取得する」をご参照ください。

SQL文を実行してJSONオブジェクトを取得する

  1. DMSを使用したRDSインスタンスへのログイン.

  2. 次のステートメントを実行してテーブルを作成し、wal2json拡張子を初期化します。

    CREATE TABLE table2_with_pk (a SERIAL, b VARCHAR(30), c TIMESTAMP NOT NULL, PRIMARY KEY(a, c));
    CREATE TABLE table2_without_pk (aシリアル、b NUMERIC(5,2) 、cテキスト);
    
    SELECT 'init' FROM pg_create_logical_replication_slot('test_slot' 、'wal2json'); 
  3. 次のステートメントを実行してデータを変更します。

    BEGIN;
    INSERT INTO table2_with_pk (b, c) VALUES('Backup and Restore', now());
    INSERT INTO table2_with_pk (b、c) 値 ('Tuning '、now());
    INSERT INTO table2_with_pk (b, c) 値 ('Replication', now());
    a < 3の場合、table2_with_pkから削除します。INSERT INTO table2_without_pk (b、c) 値 (2.34、'Tapir');
    UPDATE table2_without_pk SET c = 'Anta 'WHERE c = 'Tapir';
    コミット; 
  4. 次のステートメントを実行して、論理ログレコードをJSON形式のファイルとしてエクスポートします。

    SELECT data FROM pg_logical_slot_get_changes('test_slot' 、NULL、NULL、'pretty-print' 、'1');

    解析日志

    説明

    論理ログレコードのエクスポートを停止してリソースを解放する場合は、次のステートメントを実行します。

    SELECT 'stop' FROM pg_drop_replication_slot('test_slot');