PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tự động thả bảng và chỉ mục trước 90 ngày

Sidenote / DISCLAIMER:
Đây là một ý tưởng tồi, vì thời gian tạo bảng, điều này không đáng tin cậy 100%, vì bảng có thể đã bị xóa nội bộ và được tạo lại do các thao tác trên bảng, chẳng hạn như CLUSTER.

Ngoài ra, bạn có thể có thời gian tạo như thế này (giả sử tên-bảng-tên của 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')

Bí quyết là sử dụng pg_stat_file trên tệp bảng tương ứng.

-- 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('.'); 

Theo nhận xét trong bài đăng này PostgreSQL:Thời gian tạo bảng điều này không đáng tin cậy 100% vì bảng có thể đã bị xóa nội bộ và được tạo lại do các hoạt động trên bảng, chẳng hạn như CLUSTER.

Cũng là mẫu

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

có vẻ như là sai, như trên máy của tôi, tất cả các bảng từ các cơ sở dữ liệu khác nhau có cùng một id cơ sở dữ liệu và có vẻ như thư mục đã được thay thế bằng một số inode tùy ý, vì vậy bạn cần tìm thư mục có số gần nhất với bảng của bạn id inode (tên thư mục tối đa trong đó folderid <=table_inode_id và tên thư mục là số)

Phiên bản đơn giản hóa như sau:

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')
)

Sau đó, bạn có thể sử dụng information_schema và cte để làm cho truy vấn đơn giản hoặc tạo chế độ xem của riêng bạn:

;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 

(tất cả các bảng được tạo bằng lược đồ nhibernate đều tạo, vì vậy thời gian giống nhau nhiều hơn hoặc ít hơn trên tất cả các bảng trên ảnh chụp màn hình là chính xác).

Đối với rủi ro và tác dụng phụ, hãy sử dụng não của bạn và / hoặc hỏi bác sĩ hoặc dược sĩ của bạn;)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn đối tượng lớn nhị phân (BLOB) trong PostgreSQL bằng cách sử dụng libpq từ máy tính từ xa

  2. LoạiORM Bộ lọc OneToMany trong quan hệ không có hiệu lực để dẫn đến kết quả

  3. Giám sát PostgreSQL cần thiết - Phần 1

  4. ValueError:Không thể thêm *:trường hợp trên mặc định cơ sở dữ liệu, giá trị trên cơ sở dữ liệu Không có

  5. Postgres UPDATE với ORDER BY, làm thế nào để làm điều đó?