-- ============================================================================ -- Creates a view to monitor partition status and sizes. -- ============================================================================ CREATE OR REPLACE VIEW partitions.monitoring AS SELECT parent.relname AS parent_table, c.table_name, c.period, c.keep_history, count(child.relname) AS partition_count, count(child.relname) FILTER ( WHERE (c.period = 'day' AND child.relname > (parent.relname || '_p' || to_char(now(), 'YYYYMMDD'))) OR (c.period = 'month' AND child.relname > (parent.relname || '_p' || to_char(now(), 'YYYYMM'))) ) AS future_partitions, pg_size_pretty(sum(pg_total_relation_size(child.oid))) AS total_size, min(child.relname) AS oldest_partition, max(child.relname) AS newest_partition, c.last_updated FROM partitions.config c JOIN pg_class parent ON parent.relname = c.table_name LEFT JOIN pg_inherits ON pg_inherits.inhparent = parent.oid LEFT JOIN pg_class child ON pg_inherits.inhrelid = child.oid WHERE parent.relkind = 'p' -- Only partitioned tables GROUP BY parent.relname, c.table_name, c.period, c.keep_history, c.last_updated;