it-swarm.dev

PostgreSQL: Data utworzenia tabeli

Niedawno zakończyłem projekt, podczas którego utworzono wiele tabel DB.

Większość tych tabel zawiera tymczasowe śmieci i szukam prostego sposobu na wyświetlenie wszystkich tych tabel.

Czy istnieje sposób, aby wyświetlić listę wszystkich tabel DB posortowanych według daty ich utworzenia?

13
Adam Matan
8
Caleb

Tak, jest to możliwe - z ograniczeniami.

Widzieć

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

w celu uzyskania dalszych informacji

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

Nie, o ile mi wiadomo, nie jest to możliwe.

Ta wartość nie jest przechowywana w żadnej z tabel systemowych (byłoby to jednak miłe).

To zapytanie

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 

z pewnością pomoże.

NB: Działa tylko na greenplum.

Nie można uzyskać czasu na utworzenie tabeli, ale faktycznie można uzyskać listę tabel, które zostały niedawno utworzone, jeśli regularnie odkurza się bazę danych. Możesz użyć tego zapytania: wybierz * z pg_stat_user_tables gdzie last_vacuum> now () - interwał „3 dni”; możesz zmienić interwał zgodnie ze swoimi potrzebami.

0
user3837299