2010-04-05 25 views
32

¿Cómo puedo encontrar el tiempo de creación de tabla en Postgresql.PostgreSQL: Tiempo de creación de tabla

ejemplo,

Si crea un archivo que puedo encontrar el tiempo de creación de archivos de esa manera me gustaría saber el tiempo de creación de la tabla.

Respuesta

14

He echado un vistazo a las tablas pg_ *, y no pude encontrar ningún momento de creación allí. Es posible ubicar los archivos de tabla, pero luego en Linux no puede obtener la hora de creación de archivo. Así que creo que la respuesta es que sólo se puede encontrar esta información en Windows, utilizando los siguientes pasos:

  • obtener el identificador de base de datos con select datname, datdba from pg_database;
  • obtener el ID de la tabla filenode con select relname, relfilenode from pg_class;
  • encontrar el archivo de la tabla y busca su tiempo de creación; Creo que la ubicación debería ser algo así como <PostgreSQL folder>/main/base/<database id>/<table filenode id> (no estoy seguro de qué se trata en Windows).
+3

Hay algunas operaciones sobre una mesa, como clúster, que generarán un nuevo archivo y no se vuelve a utilizar el antiguo. Entonces este no es un método confiable –

+0

@Alex Korban: Totalmente automatizado aquí: http://stackoverflow.com/questions/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752 –

+0

@Quandary: Interesante, gracias . Parece que todavía no hay un método a prueba de balas para hacerlo, aparte de almacenar los tiempos de creación usted mismo. –

2

No creo que sea posible desde PostgreSQL, pero probablemente lo encuentres en el momento de creación del archivo de la tabla subyacente.

17

No puede - la información no está grabada en ningún lado. Ver los archivos de la tabla no necesariamente le proporcionará la información correcta: hay operaciones de tabla que crearán un nuevo archivo para usted, en cuyo caso la fecha se reiniciaría.

-3

Puede obtenerlo desde pg_stat_last_operation. Aquí es cómo hacerlo:

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

Esta tabla almacena siguientes operaciones:

select distinct staactionname from pg_stat_last_operation; 

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

ANALYZE 

CREATE 

PARTITION 

PRIVILEGE 

VACUUM 
(6 rows) 
+5

ERROR: "pg_stat_last_operation no existe", estoy usando pg9.2.4. –

+3

pg_stat_last_operation es Greenplum. –

+0

La tabla 'pg_stat_all_tables' también podría ayudar. –

-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 

ayudará a lograr los resultados deseados

(probado en greenplum)

+0

Esta es la misma respuesta que Manoj's y greenplum específicos. – dezso

+0

Estoy usando dos tablas –

+1

esto no funciona en PostgreSQL – a1an

0

Suggested here:

SELECT oid FROM pg_database WHERE datname = 'mydb'; 

Entonces (suponiendo que el oid es 12345):

ls -l $PGDATA/base/12345/PG_VERSION 

Esta solución se supone que PG_VERSION es el menos probable que ser modificado después de la creación.

NB: Si PGDATA no está definido, compruebe Where does PostgreSQL store the database?

Cuestiones relacionadas