web-dev-qa-db-ja.com

一時停止および再開後のPostgreSQLレプリケーションのステータス

PostgreSQLデータベースをバックアップするには、ストリーミングレプリケーションを使用するスレーブサーバーをセットアップします。

コマンドpg_xlog_replay_pause()およびpg_xlog_replay_resume()が見つかりました。したがって、コマンドを使用してレプリケーション(xlogの再生)を一時停止し、_pg_dump_を開始してからレプリケーションを再開することを考えました。

「再開」後にPostgreSQLデータベースがいつ同期されるかを知るにはどうすればよいですか?通常、このコマンドを使用して「ラグ」を確認しました。

_SELECT extract(seconds from (now() - pg_last_xact_replay_timestamp())) AS time_lag;
_

pg_xlog_replay_pause()の後に使用すると、秒単位の「遅れ」のみが表示されます。したがって、ここでは正しいクエリではないようです。これには良い解決策がありますか?

1つの解決策は、マスターサーバーにcronjobを書き込んで1分ごとにタイムスタンプを更新し、タイムスタンプが多かれ少なかれ最新のときにスレーブをチェックすることです。しかし、私はPostgreSQL自体からのより良い解決策があるはずだと思います。

1
ChristophLSA

私があなたの質問を誤解していない限り、SELECT extract(Epoch from (now() - pg_last_xact_replay_timestamp())) AS time_lag;はあなたが探しているものを与えます-元のクエリが返すラグの秒部分ではなく、秒単位のラグ。複数のextract (seconds ...) + extract(minutes ...)*60 + extract (hours ...) *60*24 +...で同じことを実現できます

1
a1ex07