7

postgresql の WAL ファイルを読み取ろうとしていますが、WAL バイナリ ファイルで使用されているバイナリ エンコーディングの種類を教えてください。

4

4 に答える 4

5

あなたは本当にそれを行うことはできません. WAL アーカイブからバイトを読み取るのは簡単ですが、意味を理解したいようです。あなたはそれに苦労するでしょう。

WAL アーカイブは、データベースで変更されたブロックを示すバイナリ ログです。これらは SQL レベルまたは行レベルの変更ログではないため、単に調べて変更された行のリストを取得することはできません。

代わりに、トリガーベースのレプリケーションまたは監査トリガーを調査することをお勧めします。

于 2012-12-27T09:34:08.983 に答える
3

他の回答が示唆するように、形式は複雑で低レベルです。

ただし、保存されているデータを学習して理解する時間があり、ソースからバイナリをビルドする方法を知っている場合は、次のバージョンの公開リーダーがあり8.3ます9.2: xlogdump

それをビルドする通常の方法は、contrib (Postgres アドオン) としてです。

  • まず、WAL データを表示する Postgres のバージョンのソースを取得します。
    • ./configuremakeこれですが、インストールする必要はありません
  • 次に、xlogdump フォルダーをcontribフォルダーにコピーします (そのフォルダー内の git clone は正常に動作します)。
  • makexlogdump を実行します。親の postgres 構造が検出され、バイナリがビルドされます。

バイナリをパスにコピーするか、その場で使用できます。あなたが見ているものを理解する前に、Postgres についての多くの内部知識が必要であることに注意してください。データベースを使用できる場合は、ログから SQL ステートメントを取り消すことを試みることができます。

これを Java で実行するには、実行可能ファイルをラップするか、C ライブラリをハイブリッドとしてリンクするか、ソースから必要な解析を行う方法を見つけます。これらのオプションには、多くの詳細な作業が含まれる可能性があります。

于 2014-02-17T12:42:18.903 に答える
0

WAL ファイルは、実際のデータベース ファイル自体と同じ形式であり、使用している PostgreSQL の正確なバージョンによって異なります。正確な形式を判断するには、特定のバージョンのソース コードを調べる必要があるでしょう。

于 2012-12-27T09:00:49.407 に答える