sql >> データベース >  >> RDS >> PostgreSQL

過去24時間にデータが変更されたすべてのテーブルをどのように一覧表示しますか?

    最初に私のコメントを検討してください。

    9.4までのPostgresは、行が挿入または更新されたときのタイムスタンプをそれ自体では記録しません。

    行ヘッダーにいくつかのシステム列があります それは法医学の仕事に役立つことができます。行の物理的な順序( ctid できます それ以降、テーブルに何も起こらなかった場合の指標になります。単純なケースでは、挿入時に新しい行がテーブルの物理的な終わりに追加されるため、ctid テーブルに何かが変更されるまで、最後に挿入されたものを示します。 Postgresは、たとえばVACUUMを使用して、行の物理的な順序を自由に再配置できます。 。 UPDATE また、物理的な位置を変更できる新しい行バージョンを書き込みます。新しいバージョンは、表の最後にある必要はありません。 Postgresは、可能であれば同じデータページに新しい行バージョンを保持しようとします(ホットアップデート )...

    そうは言っても、これは物理的に取得するための簡単なクエリです。 特定のテーブルの最後の行:

    SELECT ctid, *
    FROM   big
    ORDER  BY ctid DESC
    LIMIT  10;
    

    詳細情報を含むdba.SEの関連回答:

    トランザクションIDの挿入xmin 役立つ場合があります:

    バックアップがある場合 インシデントの直前のテストDBの場合、 役に立ちます。古い状態をテストDBの別のスキーマに復元し、テーブルを比較します...

    通常、1つまたは2つのtimestamptzを追加します 行が挿入されたとき、および/または最後に更新されたときの重要なテーブルへの列。その 今すぐあなたに非常に役立ちます...

    また、あなたにとっても素晴らしいことです。SQLを使用したSQL標準で導入された"temporal"機能: 2011 。しかし、それはまだPostgresに実装されていません。
    PostgresWikiにpageがあります> 。
    非公式のPGXNの拡張機能 もあります。 。私はそれをテストしておらず、どこまで進んでいるかはわかりません。

    Postgres 9.5 コミットタイムスタンプを記録する機能が導入されました (@Craigがコメントしました )。記録を開始する前に手動で有効にする必要があります。マニュアル:

    そしてそれを操作するためのいくつかの関数。>




    1. PostgreSQL 12:外部キーとパーティションテーブル

    2. ニージャークパフォーマンスチューニング:一時テーブルの誤った使用

    3. コマンドラインからmysqlリモートデータベースにアクセスする

    4. データ変更の効果的な管理