私は最近、多くのDBテーブルが作成されているプロジェクトを終了しました。
これらのテーブルのほとんどには一時的なゴミが含まれているので、これらすべてのテーブルを一覧表示する簡単な方法を探しています。
作成日に基づいてソートされたすべてのDBテーブルを一覧表示する方法はありますか?
Stackoverflowでこれを見つけました: https://stackoverflow.com/questions/2577168/postgresql-table-creation-time
はい、それは可能です-制限付き。
見る
詳細については
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;
いいえ、それは私の知る限りでは不可能です。
その値は、どのシステムテーブルにも格納されません(ただし、Niceになります)。
このクエリ
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
きっと役に立ちます。
注意:グリーンプラムでのみ機能します。
テーブル作成時間を取得することはできませんが、データベースを定期的にバキュームすると、実際に最近作成されたテーブルのリストを取得できます。このクエリを使用できます。select* from pg_stat_user_tables where last_vacuum> now()-interval '3 days';必要に応じて間隔を変更できます。