2010-04-05 1558 views
32

如何在Postgresql中查找表创建时间?PostgreSQL:表创建时间

例,

如果我创建了一个文件,我可以找到该文件的创建时间一样,我想知道表的创建时间。

回答

14

我看了一遍pg_ *表,并且在那里找不到任何创建时间。可以找到表格文件,但是在Linux上你无法获得文件创建时间。因此,我认为答案是,你只能找到在Windows上的信息,使用以下步骤:

  • 获得数据库ID与select datname, datdba from pg_database;
  • 获得与select relname, relfilenode from pg_class;
  • 表filenode的ID查找表文件并查看其创作时间;我认为这个位置应该是<PostgreSQL folder>/main/base/<database id>/<table filenode id>(不知道它在Windows上是什么)。
+3

上有一个表中的一些操作,比如CLUSTER,这将产生一个新的文件,而不是重新使用旧的。所以这不是一个可靠的方法。 – 2010-04-05 09:15:57

+0

@Alex Korban:完全自动化在这里:http://stackoverflow.com/questions/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752 – 2013-09-17 15:09:17

+0

@Quandary:有趣的,谢谢。看起来似乎还没有防弹法,除了自己存储创建时间。 – 2013-09-19 04:42:20

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 not exist”,我正在使用pg9.2.4。 – 2014-01-12 23:58:00

+3

pg_stat_last_operation是Greenplum。 – 2014-04-15 04:38:14

+0

表'pg_stat_all_tables'也可以提供帮助。 – 2015-06-15 08:12:55

-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 2014-11-07 14:12:46

+0

我使用两张表 – 2014-12-08 10:59:11

+1

这在PostgreSQL中不起作用 – a1an 2015-06-19 14:34:20

0

Suggested here

SELECT oid FROM pg_database WHERE datname = 'mydb'; 

然后(假设oid是12345):

ls -l $PGDATA/base/12345/PG_VERSION 

此解决方法假定PG_VERSION是最有可能在创建之后进行修改。

注意:如果没有定义PGDATA,检查Where does PostgreSQL store the database?