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
です。
beforeSubgroupRaftalwayswriteLeader
beforeSubgroupRaft およびalways
変異は、すべてのreconcileループで評価されます。
2つのミューテーションの違いは、実行フェーズにあります。
alwaysミューテーションの場合、PGDgroupに制限なしで各リコンサイルループで実行されます。beforeSubgroupRaftミューテーションは、 PGDグループにデータノードとPGDプロキシが定義されている場合にのみ、特にサブグループRaftの準備が整う前に実行されます。
beforeSubgroupRaft およびalways
ミューテーションは両方とも、監視ノードを含むPGDグループ内の任意のPGDノードで実行できます。したがって、監視ノードにはアプリケーションデータベースデータが含まれないため、アプリケーションデータベースのデータを変更するために使用しないでください。
writeLeader
ミューテーションは、書き込みリーダーが選択された後にトリガーおよび実行されます。
exec 操作は、書き込みリーダーノードで排他的に実行されます。