「PostgreSQL Replication by Hans-Jurgen Schonig」と、archive_commandの実行中にアーカイブWALファイルを上書きしないことをお勧めします。これの理由は?次のシナリオがWAL上書きに有効な場合Postgresql WAL archive_commandファイルの比較
Iは、個々のWALアーカイブ手順は、次のハイレベル・ロジックを実行するスクリプトを書いた:要するに
if (/archive/00000001000000F700000067 exists and is readable) and (00000001000000F700000067 is byte by byte equal to /archive/00000001000000F700000067)
exit with status 0
else
if (copy 00000001000000F700000067 to /archive/00000001000000F700000067 is successful)
if (/archive/00000001000000F700000067 exists and is readable) and (00000001000000F700000067 is byte by byte equal to /archive/00000001000000F700000067)
exit with status 0
else
exit with status non-zero
else
exit with status non-zero
を、このアプローチは、元のWALファイルは、少なくともシナリオに対して防御したいと考えています誤ってアーカイブされました。コピーには有効なファイル名がありますが、破損しています(ハードウェア障害など)。この例ではWALアーカイブプロセスの私の理解:
- にarchive_commandは、私たちはコピー手順が偽の成功応答を持っていると仮定してみましょう(コピー手順の後にバイト用-BYEの比較の際にゼロ以外の終了ステータスを返します。 )
- 文書によると、非ゼロの時にEXIT_STATUS WALアーカイブは無期限に再試行されます - WALアーカイブの第二の試みは
- にarchive_commandを発生する必要があり、既存のアーカイブWALは、現在のWALバイトと一致しないことを認識するだろう-wise
- コピー手順は2回目です。うまくいけば
- EXIT_STATUS 0は、ファイルの成功の比較の際に破損したファイルを書き込み、それ以外の場合は、このプロセスは
を繰り返すことになる私は、MD5チェックに更新することができ、比較(に関わる非常にマイナーなオーバーヘッドがあります)、誰もそのようなアプローチから生じる可能性のある問題を見ることができますか?またはさらに何かをお勧めしますか?
は私が正しくあなたの擬似コードを読めば、彼らはWALツーこと-アーカイブされ、現在に同一でない場合、あなたはアーカイブにWALセグメントを上書きしますあなたの
もちろん、華麗です。ありがとうございます。私の場合、これは単一のpostgresqlサーバへのローカルストレージです。 – abstractx1