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