19

データでいっぱいの既存のPostgresデータベースを継承しました。ほとんどのデータには「created_date」列の値があります。以前のデータの一部は、これが追跡される前に挿入されました。

INSERTクエリがいつ行われたかを追跡するPostgresメタデータテーブルがどこかに隠されていますか?

4

4 に答える 4

28

Postgres 9.5 以降

有効化 (および再起動) して、コミット タイムスタンプの追跡を開始できtrack_commit_timestampますpostgresql.conf。次に、のタイムスタンプを取得できますxmin。関連する回答:

Postgres 9.4 以前

自分で記録しない限り、PostgreSQL にはそのようなメタデータはありません。

行ヘッダー (HeapTupleHeaderData)から、特に挿入トランザクション ID から、いくつかの情報を推測できる場合があります。行が挿入されたトランザクションの ID を保持します (PostgreSQL のMVCCモデルで可視性を決定するために必要です)。試してください(任意のテーブルに対して):xmin

SELECT xmin, * FROM tbl LIMIT 10;

いくつかの制限が適用されます:

  • データベースがダンプされて復元された場合、明らかに情報は失われ、すべての行が同じトランザクションに挿入されます。
  • データベースが巨大 / 非常に古い / 非常に大量に書き込まれている場合、トランザクション ID のラップアラウンドが発生している可能性があり、番号の順序xminがあいまいです。

しかし、ほとんどのデータベースでは、以下を導出できるはずです。

  • INSERT の時系列順
  • 一緒に挿入された行
  • (おそらく)挿入の間に長い期間があったとき

ただし、タイムスタンプはありません。

于 2012-02-28T22:08:43.087 に答える
-2

短い答え:いいえ。

もしあれば、誰もが追跡したくないすべてのテーブルのスペースの無駄だと文句を言うでしょう。

于 2012-02-28T20:52:41.933 に答える