🙆

PostgreSQLスキーマ単位ロジカルレプリケーションメモ

2022/11/08に公開約1,900字

PostgreSQLスキーマ単位ロジカルレプリケーションメモ

PostgreSQL15でスキーマ単位のロジカルレプリケーション環境が構築できたので備忘しておきます。

各レプリケーションの特徴

  • ストリーミングレプリケーション
    • データベースクラスタ単位で複製
    • 同メジャーバージョン,同OSアーキテクチャ環境が前提
    • 複製先は通常参照のみ可能
    • WAL生成のタイミングでレプリケーションされる
    • DDLも含め全てレプリケーションされる (WALにDDLも含まれる)
    • スタンバイ側をマスターに昇格可能
  • ロジカルレプリケーション
    • データベース単位,スキーマ単位,テーブル単位を選択可能
    • バージョン違い,別OSアーキテクチャ環境でも構築可能
    • 複製先は書込と参照が可能
    • COMMIT完了のタイミングでレプリケーションされる
    • INSERT,UPDATE,DELETE,TRUNCATE(,MERGE)のみレプリケーションされる
    • テーブル,パーティションテーブルのみレプリケーション可能
    • ラージオブジェクトはレプリケーション不可能

構築時の作業

  • 複製元データベース
    1. postgresql.confの以下パラメータ有効化
      • wal_level = logical
      • max_wal_senders = [num]
    2. 権限のあるユーザでpublicationを作成
      • create publication pub1 for tables in schema schm1;
  • 複製先データベース
    1. 複製元と同等のテーブルを作成
      • pg_dump -h [ip] -p [port] --username=[user] --schema-only --table [table] [db] で定義取得可能
    2. 権限のあるユーザでsubscriptionを作成
      • create subscription sub1 connection 'host=[ip] port=[port] dbname=[db] password=[pass]' publication pub1;

運用中の作業

  • 複製元データベースのスキーマにテーブルを追加した時の作業
    • 複製先データベース
      1. 複製元と同等のテーブルを作成
      2. 権限のあるユーザでsubscriptionを更新
        • alter subscription sub1 refresh publication;
  • 複製状況を確認する作業

参考文献

Discussion

ログインするとコメントできます