PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

90 दिनों से पुराने टेबल और इंडेक्स को अपने आप ड्रॉप करें

सिडेनोट/अस्वीकरण:
यह एक बुरा विचार है, क्योंकि तालिका निर्माण समय यह 100% विश्वसनीय नहीं है, क्योंकि तालिका को आंतरिक रूप से छोड़ दिया गया हो सकता है और तालिका पर संचालन, जैसे CLUSTER के कारण फिर से बनाया गया हो।

इसके अलावा, आप इस तरह निर्माण समय प्राप्त कर सकते हैं (उदाहरण-तालिका-नाम t_benutzer मानते हुए) ):

--select datname, datdba from pg_database;
--select relname, relfilenode from pg_class where relname ilike 't_benutzer';

    -- (select relfilenode::text from pg_class where relname ilike 't_benutzer')




SELECT 
    pg_ls_dir
    ,
    (
        SELECT creation
        FROM pg_stat_file('./base/'
            ||
            (
                    SELECT 
                        MAX(pg_ls_dir::bigint)::text 
                    FROM pg_ls_dir('./base') 
                    WHERE pg_ls_dir <> 'pgsql_tmp' 
                    AND  pg_ls_dir::bigint  <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE 't_benutzer')
            )
            || '/' || pg_ls_dir
        )
    ) as createtime 
FROM pg_ls_dir(
    './base/' || 
    (
        SELECT 
            MAX(pg_ls_dir::bigint)::text 
        FROM pg_ls_dir('./base') 
        WHERE pg_ls_dir <> 'pgsql_tmp' 
        AND  pg_ls_dir::bigint  <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE 't_benutzer') 
    ) 
) 

WHERE pg_ls_dir = (SELECT relfilenode::text FROM pg_class WHERE relname ILIKE 't_benutzer')

रहस्य संबंधित तालिका फ़ाइल पर pg_stat_file का उपयोग करना है।

-- http://www.greenplumdba.com/greenplum-dba-faq/howtofindtablecreationdateingreenplum


select 
    pg_ls_dir
    , 
    (
        select 
            --size 
            --access
            --modification 
            --change
            creation 
            --isdir
        from pg_stat_file(pg_ls_dir)
    ) as createtime 
from pg_ls_dir('.'); 

इस पोस्ट में टिप्पणी के अनुसार PostgreSQL:टेबल निर्माण समय यह 100% विश्वसनीय नहीं है, क्योंकि तालिका को आंतरिक रूप से गिरा दिया गया है और तालिका पर संचालन, जैसे CLUSTER के कारण फिर से बनाया गया है।

साथ ही पैटर्न

/main/base/<database id>/<table filenode id> 

गलत लगता है, जैसा कि मेरी मशीन पर है, विभिन्न डेटाबेस के सभी तालिकाओं में एक ही डेटाबेस आईडी है, और ऐसा लगता है कि फ़ोल्डर को कुछ मनमानी इनोड संख्या से बदल दिया गया है, इसलिए आपको उस फ़ोल्डर को खोजने की आवश्यकता है जिसका नंबर आपकी तालिका के सबसे करीब है इनोड आईडी (अधिकतम फ़ोल्डरनाम जहां फ़ोल्डर आईडी <=table_inode_id और फ़ोल्डरनाम संख्यात्मक है)

सरलीकृत संस्करण इस प्रकार है:

SELECT creation 
FROM pg_stat_file(
    './base/'
    ||
    (
        SELECT 
        MAX(pg_ls_dir::bigint)::text 
        FROM pg_ls_dir('./base') 
        WHERE pg_ls_dir <> 'pgsql_tmp' 
        AND  pg_ls_dir::bigint  <= (SELECT relfilenode FROM pg_class WHERE relname ILIKE 't_benutzer')
    )
    || '/' || (SELECT relfilenode::text FROM pg_class WHERE relname ILIKE 't_benutzer')
)

फिर आप क्वेरी को सरल बनाने के लिए info_schema और cte का उपयोग कर सकते हैं, या अपना स्वयं का दृश्य बना सकते हैं:

;WITH CTE AS
(
    SELECT 
        table_name 

        ,
        (
            SELECT 
                MAX(pg_ls_dir::bigint)::text 
            FROM pg_ls_dir('./base') 
            WHERE pg_ls_dir <> 'pgsql_tmp' 
            AND  pg_ls_dir::bigint  <= (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 

(निबर्ननेट स्कीमा के साथ बनाई गई सभी तालिकाएँ, इसलिए स्क्रीनशॉट पर सभी तालिकाओं पर कमोबेश एक ही समय सही है)।

जोखिम और दुष्प्रभावों के लिए, अपने मस्तिष्क का उपयोग करें और/या अपने डॉक्टर या फार्मासिस्ट से पूछें;)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कंसोल से क्लाउड SQL में .csv आयात नहीं कर सकता

  2. मुझे CSV आयात करते समय postgresql में टाइप पूर्णांक के लिए अमान्य इनपुट सिंटैक्स क्यों मिल रहा है?

  3. पीजी ::अपरिभाषित ऑब्जेक्ट:त्रुटि:प्रकार hstore मौजूद नहीं है लेकिन यह करता है

  4. Sqlalchemy:द्वितीयक संबंध अद्यतन

  5. Django पोस्टग्रेज ArrayField बनाम एक-से-अनेक संबंध