★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

27.1. アーカイブリカバリの設定

restore_command (string)

連続したWALファイル断片のアーカイブを取得するために実行するシェルコマンドを指定します。 このパラメータはアーカイブリカバリには必須ですが、ストリーミングレプリケーションの場合には必須ではありません。 指定した文字列の中の %f はアーカイブから取得するファイル名に置換され、%p はコピー先サーバのディレクトリパス名に置換されます。 (パス名は、カレントワーキングディレクトリから検索されます。つまりクラスタのデータディレクトリです。) %r は、有効な最後のリスタートポイントを含むファイル名に置換されます。 これはリスタートを可能にするためのリストア時に必要とされる、保持されているべきもっとも古いファイルとなります。 よってこの情報は、現在のリストアからリスタートするために必要となるように、アーカイブを最小化するために利用することができます。 %r は通常はウォームスタンバイの設定でのみ使用されます (26.2を参照) 。 % 文字を埋め込むためには、%% と記述してください。

コマンドは、成功した時のみ終了コードのゼロを返却することが重要です。 このコマンドは、アーカイブに存在しないファイル名を求めることがあります。 その場合には、非ゼロの値を返却しなければなりません。以下に例を示します。

restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"'  # Windows

例外は、データベースサーバのシャットダウンの一部として、SIGTERM以外のシグナルでコマンドが終了させられたり、シェルによってエラーが発生した(コマンドが見つからない場合など)場合で、その場合はリカバリは中断され、サーバはスタートアップしなくなります。

archive_cleanup_command (string)

このオプションのパラメータは、すべてのリスタートポイントで実行されるシェルコマンドを指定します。 archive_cleanup_commandの目的は、スタンバイサーバにとって必要とされない古いアーカイブWALファイルをクリーンアップする仕組みを提供することです。 %rは、最後の有効なリスタートポイントを含んでいるWALファイルのファイル名に置換されます。 これはリスタートを可能にするためのリストア時に必要とされる、保持されているべきもっとも古いファイルとなり、これによって%rより前のすべてのファイルは安全に削除されます。 この情報は、現在のリストアからリスタートするために必要となるように、アーカイブを最小化するために利用することができます。 pg_archivecleanupモジュールは、単独のスタンバイ構成でarchive_cleanup_commandによく使用されます。 例:

archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'

但し、複数のスタンバイサーバが同一のアーカイブディレクトリからリストアしている場合には、どのサーバからも必要とされなくなるまで削除しないことを担保しなければなりません。 通常、archive_cleanup_command はウォームスタンバイの設定でのみ使用されます(26.2を参照)。 %文字を埋め込むためには、%%と記述してください。

コマンドが非ゼロの終了ステータスを返した場合、警告ログメッセージが出力されます。 例外は、コマンドがシグナルによって終了させられたか、シェルによってエラーが発生した(そのようなコマンドは見つからない)場合で、その場合は致命的エラーが発生します。

recovery_end_command (string)

このパラメータは、リカバリの終了時に一度だけ実行されるシェルコマンドを指定します。 このパラメータは必須ではありません。 recovery_end_command の目的は、レプリケーションやリカバリ実行後のクリーンアップのメカニズムを提供することです。 archive_cleanup_command と同様に、%r は有効な最後のリスタートポイントを含むファイル名に置換されます。

コマンドが非ゼロの終了ステータスを返した場合、警告ログメッセージが出力されますが、データベースはスタートアップ処理を続けます。 例外は、コマンドがシグナルによって終了させられたか、シェルによってエラーが発生した(そのようなコマンドは見つからない)場合で、その場合はデータベースはスタートアップ処理を継続させません。