J'ai récemment terminé un projet, au cours duquel de nombreuses tables DB ont été créées.
La plupart de ces tables contiennent des ordures temporaires et je recherche un moyen simple de répertorier toutes ces tables.
Existe-t-il un moyen de répertorier toutes les tables DB triées en fonction de leur date de création?
Trouvé ceci sur Stackoverflow: https://stackoverflow.com/questions/2577168/postgresql-table-creation-time
Oui, c'est possible - avec des limitations.
Voir
pour plus d'informations
WITH CTE AS
(
SELECT
table_name
,
(
SELECT
MAX(pg_ls_dir::int)::text
FROM pg_ls_dir('./base')
WHERE pg_ls_dir <> 'pgsql_tmp'
AND pg_ls_dir::int <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE table_name)
) as folder
,(SELECT relfilenode FROM pg_class WHERE relname ILIKE table_name) filenode
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema = 'public'
)
SELECT
table_name
,(
SELECT creation
FROM pg_stat_file(
'./base/' || folder || '/' || filenode
)
) as creation_time
FROM CTE;
Non, ce n'est pas possible pour autant que je sache.
Cette valeur n'est stockée dans aucune des tables système (ce serait bien quand même).
Cette requête
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
va sûrement aider.
NB: Il ne fonctionne que sur greenplum.
Il n'est pas possible d'obtenir le temps de création de table, mais vous pouvez en fait obtenir la liste des tables récemment créées si vous nettoyez régulièrement votre base de données. Vous pouvez utiliser cette requête: sélectionnez * dans pg_stat_user_tables où last_vacuum> now () - intervalle '3 jours'; vous pouvez modifier l'intervalle selon vos besoins.