web-dev-qa-db-fra.com

PostgreSQL: Date de création d'une table

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?

13
Adam Matan
8
Caleb

Oui, c'est possible - avec des limitations.

Voir

https://stackoverflow.com/questions/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752

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;
5
Quandary

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).

3

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.

0
user3837299