DDL and role manipulation statements#
ユーザーはPostgreSQLインスタンスのグローバルオブジェクトです。つまり、ユーザーは複数のデータベースにまたがりますが、 PGDは個々のデータベースレベルで動作します。これは、ロール操作ステートメントの処理に追加の検討が必要であることを意味します。
PGDでは、レプリケートされたDDLによって参照されるロールがすべてのノードに存在する必要があります。ロールの付与、パスワードなどは同じである必要はありませんが、存在する必要があります。
bdr.role_replication が有効デフォルトであり、ロール操作ステートメントがPGD対応データベースで実行されている場合、PGDはロール操作ステートメントをレプリケートします。
ロール操作ステートメントには次のものが含まれます。
CREATE ROLEALTER ROLEDROP ROLEGRANT ROLECREATE USERALTER USERDROP USERCREATE GROUPALTER GROUPDROP GROUP
一般に、次のいずれかです。
bdr.role_replication = offでシステムを構成し、Ansible、Puppet、Chefなどの外部オーケストレーションツールまたはbdr.replicate_ddl_command()によって明示的にレプリケートされて、すべてのロール変更ユーザーとグループを展開します。PostgreSQLインスタンス上のちょうど1つのPGD対応データベースが
bdr.role_replication = onを持つようにシステムを構成し、そのデータベースですべてのロール管理DDLを実行します。
すべてのロール管理コマンドを1つのデータベースで実行することをお勧めします。
ロールレプリケーションがオフになっている場合、管理者は、あるノードでDDLが使用するロールが他のノードにも存在することを確認する必要があります。それ以外の場合、PGD applyは、他のノードでロールが作成されるまで、エラーでストールします。