DDL and role manipulation statements
====================================

ユーザーはPostgreSQLインスタンスのグローバルオブジェクトです。つまり、ユーザーは複数のデータベースにまたがりますが、
PGDは個々のデータベースレベルで動作します。これは、ロール操作ステートメントの処理に追加の検討が必要であることを意味します。

PGDでは、レプリケートされたDDLによって参照されるロールがすべてのノードに存在する必要があります。ロールの付与、パスワードなどは同じである必要はありませんが、存在する必要があります。

 :ref:`bdr.role_replication <bdr.role_replication>` が有効デフォルトであり、ロール操作ステートメントがPGD対応データベースで実行されている場合、PGDはロール操作ステートメントをレプリケートします。

ロール操作ステートメントには次のものが含まれます。

-  ``CREATE ROLE``

-  ``ALTER ROLE``

-  ``DROP ROLE``

-  ``GRANT ROLE``

-  ``CREATE USER``

-  ``ALTER USER``

-  ``DROP USER``

-  ``CREATE GROUP``

-  ``ALTER GROUP``

-  ``DROP GROUP``

一般に、次のいずれかです。

-  ``bdr.role_replication = off``
   でシステムを構成し、Ansible、Puppet、Chefなどの外部オーケストレーションツールまたは\ ``bdr.replicate_ddl_command()``
   によって明示的にレプリケートされて、すべてのロール変更ユーザーとグループを展開します。

-  PostgreSQLインスタンス上のちょうど1つのPGD対応データベースが\ ``bdr.role_replication = on``
   を持つようにシステムを構成し、そのデータベースですべてのロール管理DDLを実行します。

すべてのロール管理コマンドを1つのデータベースで実行することをお勧めします。

ロールレプリケーションがオフになっている場合、管理者は、あるノードでDDLが使用するロールが他のノードにも存在することを確認する必要があります。それ以外の場合、PGD
applyは、他のノードでロールが作成されるまで、エラーでストールします。

..  Note PGD with non-PGD-enabled databases ::
   PGDは、 PGD対応のPostgreSQLインスタンスの非PGD対応データベースで実行されている場合、ロール管理ステートメントをキャプチャおよびレプリケートしません。たとえば、DB 'bdrdb' bdrグループメンバーと'postgres'ベアdb、および`bdr.role_replication = on` がある場合、 `bdrdb` で実行される`CREATE USER` はレプリケートされますが、 `postgres` で実行される`CREATE USER` はレプリケートされません。
