データベースを、ある決めた時点にリカバリしたい場合に備え、リカバリによってデータを戻したい時点にリストアポイントを作成することができます。
リストアポイントを使用して、過去の時点にリカバリする可能性がある場合、ここで説明する考慮が必要です。
例えば、中央管理ノード経由で、データノード1とデータノード2の両方を更新するトランザクションを実行したケースを考えます。このトランザクションは、内部的にデータノード1でcommitされ、データノード2でcommitするという順序で動作したとします。ここで、データノード1でcommitされたが、データノード2ではcommitされていない状態にリカバリしてしまうと、トランザクションが不整合な状態となってしまいます。
過去の時点にリカバリする可能性がある場合、中央管理ノードで関数pgx_create_consistent_restore_point()を実行して、整合性のあるリストアポイントを作成してください。整合性のあるリストアポイントを作成すると、内部で新たな2相コミットを抑止し、全ノードで整合性のある状態を作ります。リカバリ時にはpgx_rcvallコマンドに整合性のあるリストアポイントを指定することで、全ノードで整合性のある状態にリカバリすることができます。
# SELECT pgx_create_consistent_restore_point('batch_20200503_1');
なお、整合性のあるリストアポイントは、下記のケースでも内部的に作成されます。
pg_stop_backup()関数実行時
pgx_dmpallコマンド実行時
pg_basebackupコマンド実行時
CREATE PGXNODE、ALTER PGXNODE、DROP PGXNODE実行時
また、内部的に、prefixがpostgres_scaleout_fdw_crpの論理デコードのメッセージがWALに出力されます。
なお、整合性のあるリストアポイントを作成する際には、各ノードに通信を行うため、実行するユーザーには、各ノードへのユーザーマッピングが必要になります。