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に
非公式の
Postgres 9.5 コミットタイムスタンプを記録する機能が導入されました (@Craigがコメントしました
)。記録を開始する前に手動で有効にする必要があります。