2010-04-05 3 views

ответ

14

Я просмотрел таблицы pg_ *, и я не мог найти там времени создания. Можно найти файлы таблиц, но тогда в Linux вы не сможете получить время создания файла. Так что я думаю, что ответ в том, что вы можете только найти эту информацию на Windows, используя следующие шаги:

  • получить идентификатор базы данных с select datname, datdba from pg_database;
  • получить таблицу filenode идентификатора с select relname, relfilenode from pg_class;
  • найти файл таблицы и посмотрите время своего создания; Я думаю, что местоположение должно быть чем-то вроде <PostgreSQL folder>/main/base/<database id>/<table filenode id> (не уверен, что это на Windows).
+3

Есть некоторые операции на столе, такие как кластер, который будет генерировать новый файл, а не повторно использовать старый. Так что это не надежный метод. –

+0

@Alex Korban: Полностью автоматизировать это здесь: http://stackoverflow.com/questions/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752 –

+0

@Quandary: Интересно, спасибо , Похоже, до сих пор не существует пуленепробиваемого метода, кроме как хранить время создания самостоятельно. –

2

Я не думаю, что это возможно изнутри PostgreSQL, но вы, вероятно, найдете его в времени создания основного файла таблицы.

17

Вы не можете - информация не записывается нигде. Просмотр файлов таблицы не обязательно даст вам правильную информацию - есть операции с таблицами, которые создадут для вас новый файл, и в этом случае дата будет сброшена.

-3

Вы можете получить это из pg_stat_last_operation. Вот как это сделать:

select * from pg_stat_last_operation where objid = 'table_name'::regclass order by statime; 

В этой таблице хранятся следующие операции:

select distinct staactionname from pg_stat_last_operation; 

staactionname 
--------------- 
ALTER 

ANALYZE 

CREATE 

PARTITION 

PRIVILEGE 

VACUUM 
(6 rows) 
+5

ОШИБКА: «pg_stat_last_operation не существует», я использую pg9.2.4. –

+3

pg_stat_last_operation - Greenplum. –

+0

Таблица 'pg_stat_all_tables' также может помочь. –

-3

--query

select pslo.stasubtype, pc.relname, pslo.statime 
from pg_stat_last_operation pslo 
join pg_class pc on(pc.relfilenode = pslo.objid) 
and pslo.staactionname = 'CREATE' 
Order By pslo.statime desc 

поможет достичь желаемых результатов

(пробовал на greenplum)

+0

Это тот же ответ, что и Manoj's и greenplum. – dezso

+0

Я использую две таблицы –

+1

, это не работает в PostgreSQL – a1an

0

Suggested here:

SELECT oid FROM pg_database WHERE datname = 'mydb'; 

Тогда (при условии oid 12345):

ls -l $PGDATA/base/12345/PG_VERSION 

Этот способ предполагает, что PG_VERSION является наименее вероятно, будет изменен после создания.

NB: Если PGDATA не определен, проверьте Where does PostgreSQL store the database?