postgresql の WAL ファイルを読み取ろうとしていますが、WAL バイナリ ファイルで使用されているバイナリ エンコーディングの種類を教えてください。
4 に答える
あなたは本当にそれを行うことはできません. WAL アーカイブからバイトを読み取るのは簡単ですが、意味を理解したいようです。あなたはそれに苦労するでしょう。
WAL アーカイブは、データベースで変更されたブロックを示すバイナリ ログです。これらは SQL レベルまたは行レベルの変更ログではないため、単に調べて変更された行のリストを取得することはできません。
代わりに、トリガーベースのレプリケーションまたは監査トリガーを調査することをお勧めします。
他の回答が示唆するように、形式は複雑で低レベルです。
ただし、保存されているデータを学習して理解する時間があり、ソースからバイナリをビルドする方法を知っている場合は、次のバージョンの公開リーダーがあり8.3
ます9.2
: xlogdump
それをビルドする通常の方法は、contrib (Postgres アドオン) としてです。
- まず、WAL データを表示する Postgres のバージョンのソースを取得します。
./configure
とmake
これですが、インストールする必要はありません
- 次に、xlogdump フォルダーをcontribフォルダーにコピーします (そのフォルダー内の git clone は正常に動作します)。
make
xlogdump を実行します。親の postgres 構造が検出され、バイナリがビルドされます。
バイナリをパスにコピーするか、その場で使用できます。あなたが見ているものを理解する前に、Postgres についての多くの内部知識が必要であることに注意してください。データベースを使用できる場合は、ログから SQL ステートメントを取り消すことを試みることができます。
これを Java で実行するには、実行可能ファイルをラップするか、C ライブラリをハイブリッドとしてリンクするか、ソースから必要な解析を行う方法を見つけます。これらのオプションには、多くの詳細な作業が含まれる可能性があります。
WAL ファイルは、実際のデータベース ファイル自体と同じ形式であり、使用している PostgreSQL の正確なバージョンによって異なります。正確な形式を判断するには、特定のバージョンのソース コードを調べる必要があるでしょう。