2010-04-05 9 views
32

Come posso trovare il tempo di creazione della tabella in Postgresql.PostgreSQL: tempo di creazione tabella

Esempio,

Se ho creato un file posso trovare il tempo di creazione del file come quello che voglio sapere l'ora di creazione tabella.

risposta

14

Ho dato un'occhiata alle tabelle pg_ * e non sono riuscito a trovare i tempi di creazione. È possibile individuare i file di tabella, ma su Linux non è possibile ottenere il tempo di creazione del file. Quindi penso che la risposta è che si può solo trovare queste informazioni su Windows, utilizzando le seguenti operazioni:

  • ottenere l'ID database con select datname, datdba from pg_database;
  • ottenere l'ID tabella filenode con select relname, relfilenode from pg_class;
  • trovare il file tavolo e cerca il suo tempo di creazione; Penso che la posizione dovrebbe essere qualcosa come <PostgreSQL folder>/main/base/<database id>/<table filenode id> (non so cosa sia su Windows).
+3

Ci sono alcune operazioni su un tavolo, come ad esempio cluster, che genereranno un nuovo file e non re-utilizzare quello vecchio. Quindi questo non è un metodo affidabile. –

+0

@Alex Korban: completamente automatizzato qui: http://stackoverflow.com/questions/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752 –

+0

@Quandary: interessante, grazie . Sembra che non ci sia ancora un metodo a prova di proiettile per farlo, oltre a memorizzare te stesso. –

2

Non penso sia possibile in PostgreSQL, ma probabilmente lo troverai nel tempo di creazione del file della tabella sottostante.

17

Non è possibile - l'informazione non è registrata da nessuna parte. Guardare i file della tabella non ti darà necessariamente le informazioni giuste - ci sono operazioni da tavolo che creeranno un nuovo file per te, nel qual caso la data verrebbe ripristinata.

-3

È possibile ottenere questo da pg_stat_last_operation. Ecco come fare:

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

negozi Questa tabella seguenti operazioni:

select distinct staactionname from pg_stat_last_operation; 

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

ANALYZE 

CREATE 

PARTITION 

PRIVILEGE 

VACUUM 
(6 rows) 
+5

ERRORE: "pg_stat_last_operation non esiste", sto usando pg9.2.4. –

+3

pg_stat_last_operation è Greenplum. –

+0

Anche la tabella 'pg_stat_all_tables' potrebbe essere d'aiuto. –

-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 

contribuirà a realizzare i risultati desiderati

(provato su greenplum)

+0

Questa è la stessa risposta di Manoj e greenplum specifici. – dezso

+0

Sto usando due tabelle –

+1

questo non funziona in PostgreSQL – a1an

0

Suggested here:

SELECT oid FROM pg_database WHERE datname = 'mydb'; 

Poi (assumendo che il oid è 12345):

ls -l $PGDATA/base/12345/PG_VERSION 

Questa soluzione presuppone che PG_VERSION è meno probabilità di essere modificato dopo la creazione.

NB: Se PGDATA non è definito, controllare Where does PostgreSQL store the database?

Problemi correlati