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自体からのより良い解決策があるはずだと思います。
私があなたの質問を誤解していない限り、SELECT extract(Epoch from (now() - pg_last_xact_replay_timestamp())) AS time_lag;
はあなたが探しているものを与えます-元のクエリが返すラグの秒部分ではなく、秒単位のラグ。複数のextract (seconds ...) + extract(minutes ...)*60 + extract (hours ...) *60*24 +...
で同じことを実現できます