pglogical 1.1パッケージを、rpmベースとdebベースの両方のディストリビューションでPostgreSQL9.6beta1で利用できるようにしました。これらは、標準のpglogicalパッケージリポジトリからインストールできます。
なぜPostgresのベータ版のパッケージをリリースするのかと疑問に思われるかもしれません。その理由の1つは、pglogicalを使用して既存のPostgreSQL 9.5または9.4データベースをリアルタイムで9.6beta1に複製し、テストを実行して、ベータリリースに残っているバグを取り除くことができることです。これを行う方法についての簡単なチュートリアルがあります。
最初のステップは、PostgreSQL 9.6beta1をインストールすることです。これを行う方法については、リリースアナウンスを確認してください。 2番目のステップは、インストール手順ページで説明されているようにpglogicalをインストールすることです。
次に、実際のレプリケーション設定について説明します。かなり簡単です。 PostgreSQLが論理レプリケーションを許可するように構成されていることを確認することから始めます。
wal_level = 'logical'
max_worker_processes = 10 # one per database needed on provider node
# one per node needed on subscriber node
max_replication_slots = 10 # one per node needed on provider node
max_wal_senders = 10 # one per node needed on provider node
shared_preload_libraries = 'pglogical'
上記の設定を変更するには、サーバーを再起動する必要があります。
また、pg_hba.confで着信レプリケーション接続を許可する必要があります(物理ストリーミングレプリケーションを設定する場合と同様)。 pg_hba.confの行は次のようになります。
host replication postgres 10.0.0.2/32 md5
詳細については、pg_hbaのドキュメントページを参照してください。
次に、プロバイダーデータベースにpglogical拡張機能をインストールし、そこにpglogicalノードを作成します。
CREATE EXTENSION pglogical;
SELECT pglogical.create_node(
node_name := 'provider1',
dsn := 'host=providerhost port=5432 dbname=db'
);
次に、新しい9.6データベースでも同じことを行います。
CREATE EXTENSION pglogical;
SELECT pglogical.create_node(
node_name := 'subscriber1',
dsn := 'host=subscriberhost port=5432 dbname=db'
);
接続文字列は、これらのコマンドを実行しているデータベースにつながる必要があることに注意してください。
プロバイダーデータベースに戻り、複製するテーブルをdefault
に追加します レプリケーションセット。これを行う簡単な方法は、public
にすべてのテーブルを追加することです。 このようなスキーマ:
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
そして最後に、再びサブスクライバーデータベースで、プロバイダーに接続して複製を開始するサブスクリプションを作成します。
SELECT pglogical.create_subscription(
subscription_name := 'subscription1',
provider_dsn := 'host=providerhost port=5432 dbname=db',
synchronize_structure := true
);
ここで、接続文字列は、プロバイダーのpglogicalノードを作成するときに使用したものと同じである必要があります。 synchronize_structure := true
これは、pglogicalがすべてのテーブル構造をプロバイダーデータベースからサブスクライバーデータベースにコピーすることを意味します(標準のpg_dump
を使用) 。
これで、既存のPostgreSQL9.5または9.4データベースと新しいPostgreSQL9.6beta1の間でレプリケーションが機能するようになりました。
この投稿で使用されている機能と、単なる複製以上の方法に関する追加情報については、pglogicalのドキュメントとプロジェクトのページを確認してください。