Как узнать, когда данные были добавлены в Postgres?

Я унаследовал существующую базу данных Postgres, полную данных. Большая часть данных имеет значение столбца create_date. Некоторые из более ранних данных были вставлены до того, как они были отслежены.

Есть ли где-нибудь скрытая таблица метаданных Postgres, которая отслеживает выполнение запросов INSERT?

Ответ 1

Postgres 9,5 или позже

Вы можете включить track_commit_timestamp в postgresql.conf (и перезапустить), чтобы начать отслеживать временные метки фиксации. Затем вы можете получить метку времени для вашего xmin. Связанный ответ:

Postgres 9.4 или старше

В PostgreSQL нет таких метаданных, если вы сами не записали их.

Вы можете получить некоторую информацию из заголовков строк (HeapTupleHeaderData), в частности из идентификатора транзакции вставки xmin. Он содержит идентификатор транзакции, в которую была вставлена строка (необходим для определения видимости в модели PostgreSQL MVCC). Попробуйте (для любой таблицы):

SELECT xmin, * FROM tbl LIMIT 10;

Некоторые ограничения применяются:

  • Если база данных была выгружена и восстановлена, то, очевидно, информация исчезла - все строки вставляются в одну транзакцию.
  • Если база данных огромна/очень старая/очень сильно написана, то, возможно, она прошла через обход идентификатора транзакции, и порядок чисел в xmin неоднозначен.

Но для большинства баз данных вы должны иметь возможность получить:

  • хронологический порядок ВСТАВКИ
  • какие строки были вставлены вместе
  • когда между вставками (вероятно) был длительный промежуток времени

Впрочем, времени нет.

Ответ 2

track_commit_timestamp (логическое значение)

В основном используется во время настройки сервера репликации. Запись времени фиксации транзакций. Этот параметр можно установить только в файле postgresql.conf или в командной строке сервера. Значение по умолчанию выключено.

Ответ 3

Короткий ответ: нет.

Если бы это было так, все бы жаловались, что это была пустая трата пространства на всех таблицах, которые они не хотели отслеживать.