SQLMutations#

SQLMutationは、 PGDノードがPGDグループに参加した後、スーパーユーザーロールを介してアプリケーションデータベースで実行するSQLクエリのリストで構成されます。各SQLMutationには、isApplied クエリーのisApplied リストとexec クエリーのexec リストが含まれます。 isApplied SQLクエリーは、変更が既に適用されているかどうかを確認するために使用されます。 isApplied クエリーのいずれかがfalseを返した場合、 SQLクエリーのexec リストが実行キューに追加されます。

次に、SQLミューテーションのサンプルを示します。

apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
  pgd:
    mutations:
      - isApplied:
          - |
             WITH node_route_config AS (
               SELECT node_name, route_dsn
               FROM bdr.node_routing_config_summary
             )
            SELECT NOT EXISTS(SELECT * FROM node_route_config WHERE regexp_count(route_dsn, application_name=) >= 1);
        exec:
          - |
            WITH node_route_config AS (
              SELECT node_name,
                     regexp_replace(route_dsn, concat( application_name=,  node_name), ) as route_dsn
              FROM bdr.node_routing_config_summary
            )
            SELECT bdr.alter_node_option(node_name, route_dsn, route_dsn)
            FROM node_route_config;

SQLミューテーションタイプ#

この演算子は、 spec.pgd.mutations[].type で指定する3種類のSQLMutationを提供します。デフォルトはalways です。

  • beforeSubgroupRaft

  • always

  • writeLeader

beforeSubgroupRaft およびalways 変異は、すべてのreconcileループで評価されます。 2つのミューテーションの違いは、実行フェーズにあります。

  • always ミューテーションの場合、PGDgroupに制限なしで各リコンサイルループで実行されます。

  • beforeSubgroupRaft ミューテーションは、 PGDグループにデータノードとPGDプロキシが定義されている場合にのみ、特にサブグループRaftの準備が整う前に実行されます。

beforeSubgroupRaft およびalways ミューテーションは両方とも、監視ノードを含むPGDグループ内の任意のPGDノードで実行できます。したがって、監視ノードにはアプリケーションデータベースデータが含まれないため、アプリケーションデータベースのデータを変更するために使用しないでください。

writeLeader ミューテーションは、書き込みリーダーが選択された後にトリガーおよび実行されます。 exec 操作は、書き込みリーダーノードで排他的に実行されます。