Kısa bir süre önce birçok DB tablosunun oluşturulduğu bir projeyi bitirdim.
Bu tabloların çoğu geçici çöp içerir ve tüm bu tabloları listelemek için basit bir yol arıyorum.
Tüm DB tablolarını oluşturulma tarihlerine göre sıralamanın bir yolu var mı?
Kısa bir süre önce birçok DB tablosunun oluşturulduğu bir projeyi bitirdim.
Bu tabloların çoğu geçici çöp içerir ve tüm bu tabloları listelemek için basit bir yol arıyorum.
Tüm DB tablolarını oluşturulma tarihlerine göre sıralamanın bir yolu var mı?
Yanıtlar:
Bunu Stackoverflow'da buldum: /programming/2577168/postgresql-table-creation-time
Evet mümkündür - sınırlamalarla.
Görmek
/programming/18849756/automatically-drop-tables-and-indexes-older-than-90-days/18852752#18852752
daha fazla bilgi için
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;
Hayır, bildiğim kadarıyla bu mümkün değil.
Bu değer sistem tablolarının hiçbirinde depolanmaz (olsa iyi olurdu).
Bu sorgu
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
kesinlikle yardımcı olacaktır.
Not: Yalnızca greenplum üzerinde çalışır.
Tablo oluşturma süresi elde etmek mümkün değildir, ancak veritabanınızı düzenli olarak vakumlarsanız son oluşturulan tabloların listesini alabilirsiniz. Bu sorguyu kullanabilirsiniz: pg_stat_user_tables adresinden * seçin; burada last_vacuum> now () - aralık '3 gün'; aralığı ihtiyacınıza göre değiştirebilirsiniz.