PostgreSQL: date de création d'une table

12

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?

Adam Matan
la source

Réponses:

5

Oui, c'est possible - avec des limitations.

Voir

/programming/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;
Dilemme
la source
3

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

un cheval sans nom
la source
1

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.

Gurupreet Singh Bhatia
la source
0

Il n'est pas possible d'obtenir le temps de création de la table, mais vous pouvez réellement 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.

user3837299
la source