postgresqlデータベースのデータの変更を追跡する必要があります。それらのデータとDMLも表示するためのデータベースまたはスクリプトにオプションはありますか?
3 に答える
申し訳ありませんが、手がかりがありません。しかし、いくつかの異なる提案があります。
update、delete、insert、alter table などに関連するものについては、/all/ クエリをログに記録し、grep を実行してください。すべての変更ステートメントを100%確実にキャッチする正規表現を簡単に作成できるかどうかはわかりません。ロールバックなどをキャッチするのが難しい場合があります。すべてをログに記録するには、これを構成ファイルに追加します:
log_min_duration_statement = 0
. 他の log_* 構成変数も正常であることを確認してください。ルール/トリガーアプローチ(他のユーザーが示唆したように)-すべてのテーブルごとにルールを作成する必要があると思いますが、もちろん実行可能です(多くの場合、外部スクリプトを介してルールを作成できるはずです)テーブル)。また、slony がどのように機能するかを少し調べることもできます。slony はトリガーベースのレプリケーション システムであり、DB 内のすべての変更をキャッチするために使用できるはずです。
データベースへのすべての変更は最終的に WAL ファイルに保存されます。理論的には WAL から何かを抽出することは可能かもしれませんが、すでに熟練した postgres ハッカーでない限り、それは実用的ではないと思います。 postgres ハッカーなら、おそらく最初からこの質問をすることはないでしょう ;-) (最終的には、WAL を使用して、データの変化率を確認したり、1 日の中で他の更新よりも多くの更新がある時間を特定したりすることができます。また、レプリケーションやバイナリ バックアップからのロールフォワードにも使用できます)。
postgresql.confでlog_statement='all'を設定する間に、tablelogを使用して古いデータをキャプチャすることもできます。
すべてをコードで管理する (手動でログを追加する) か、このページで情報や自動ログ記録のルールの例を確認できます。
http://www.postgresql.org/docs/current/static/rules-views.html