Nedávno jsem dokončil projekt, během kterého bylo vytvořeno mnoho tabulek DB.
Většina z těchto tabulek obsahuje dočasné odpadky a hledám jednoduchý způsob, jak vyjmenovat všechny tyto tabulky.
Existuje způsob, jak zobrazit všechny tabulky DB seřazené podle data jejich vytvoření?
Nalezeno na Stackoverflow: https://stackoverflow.com/questions/2577168/postgresql-table-creation-time
Ano, je to možné - s omezeními.
Vidět
pro další informace
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;
Ne, pokud vím, to není možné.
Tato hodnota není uložena v žádné ze systémových tabulek (i když by byla pěkná).
Tento dotaz
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
jistě pomůže.
Pozn .: Funguje to pouze na greenplum.
Není možné získat čas vytvoření tabulky, ale můžete získat seznam nedávno vytvořených tabulek, pokud pravidelně vysáváte databázi. Můžete použít tento dotaz: vyberte * z pg_stat_user_tables kde last_vacuum> now () - interval '3 dny'; interval můžete podle potřeby změnit.