PostgreSQL: Erstellungsdatum einer Tabelle

12

Ich habe kürzlich ein Projekt abgeschlossen, in dem viele DB-Tabellen erstellt wurden.

Die meisten dieser Tabellen enthalten temporären Müll, und ich suche nach einer einfachen Möglichkeit, alle diese Tabellen aufzulisten.

Gibt es eine Möglichkeit, alle DB-Tabellen nach ihrem Erstellungsdatum sortiert aufzulisten?

Adam Matan
quelle

Antworten:

5

Ja, das ist möglich - mit Einschränkungen.

Sehen

/programming/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752

Für weitere Informationen

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;
Dilemma
quelle
3

Nein, das ist meines Wissens nicht möglich.

Dieser Wert wird in keiner der Systemtabellen gespeichert (wäre aber nett).

ein Pferd ohne Name
quelle
1

Diese Abfrage

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 

wird sicherlich helfen.

NB: Es funktioniert nur auf Greenplum.

Gurupreet Singh Bhatia
quelle
0

Es ist nicht möglich, die Erstellungszeit für Tabellen abzurufen, aber Sie können tatsächlich die Liste der kürzlich erstellten Tabellen abrufen, wenn Sie Ihre Datenbank regelmäßig staubsaugen. Sie können diese Abfrage verwenden: Wählen Sie * aus pg_stat_user_tables aus, wobei last_vacuum> now () - Intervall '3 Tage'; Sie können das Intervall nach Bedarf ändern.

user3837299
quelle