it-swarm.asia

PostgreSQL: تاريخ إنشاء الجدول

لقد أنهيت مؤخرًا مشروعًا ، تم خلاله إنشاء العديد من جداول DB.

تحتوي معظم هذه الجداول على القمامة المؤقتة ، وأنا أبحث عن طريقة بسيطة لسرد جميع هذه الجداول.

هل هناك طريقة لسرد جميع جداول DB مرتبة حسب تاريخ إنشائها؟

13
Adam Matan
8
Caleb

نعم هذا ممكن - مع قيود.

نرى

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

لمزيد من المعلومات

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

لا ، هذا غير ممكن على حد علمي.

لا يتم تخزين هذه القيمة في أي من جداول النظام (سيكون لطيفًا على الرغم من ذلك).

3
a_horse_with_no_name

هذا الاستعلام

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 

سوف يساعد بالتأكيد.

ملحوظة: يعمل فقط على البرقوق.

1
Gurupreet Singh Bhatia

ليس من الممكن الحصول على وقت إنشاء الجدول ، ولكن يمكنك في الواقع الحصول على قائمة الجداول التي تم إنشاؤها مؤخرًا إذا قمت بتنظيف قاعدة بياناتك بشكل منتظم. يمكنك استخدام هذا الاستعلام: select * from pg_stat_user_tables where last_vacuum> now () - الفاصل الزمني "3 أيام"؛ يمكنك تغيير الفاصل الزمني حسب حاجتك.

0
user3837299