it-swarm.asia

PostgreSQL: Tanggal pembuatan tabel

Saya baru saja menyelesaikan sebuah proyek, di mana banyak tabel DB dibuat.

Sebagian besar tabel ini berisi sampah sementara, dan saya mencari cara sederhana untuk mendaftar semua tabel ini.

Apakah ada cara untuk mendaftar semua tabel DB yang diurutkan berdasarkan tanggal pembuatannya?

13
Adam Matan
8
Caleb

Ya itu mungkin - dengan keterbatasan.

Lihat

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

untuk informasi lebih lanjut

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

Tidak, itu tidak mungkin sejauh yang saya tahu.

Nilai itu tidak disimpan dalam tabel sistem mana pun (akan lebih baik).

Kueri ini

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 

pasti akan membantu.

NB: Ini hanya berfungsi pada greenplum.

Tidak mungkin mendapatkan waktu pembuatan tabel, tetapi Anda sebenarnya bisa mendapatkan daftar tabel yang baru dibuat jika Anda menyedot database Anda secara teratur. Anda dapat menggunakan kueri ini: pilih * dari pg_stat_user_tables di mana last_vacuum> now () - interval '3 hari'; Anda dapat mengubah interval sesuai kebutuhan Anda.

0
user3837299