From PostgreSQL 11, the fuction
pg_partition_tree has been available
Usage, in its simplest form:
SELECT *
FROM pg_partition_tree('ldksf.entitet');
select * from pg_partition_tree('ldksf.entitet');
relid | parentrelid | isleaf | level
--------------------+-------------+--------+-------
entitet | | f | 0
entitet_default | entitet | t | 1
entitet_p0 | entitet | t | 1
entitet_p120000000 | entitet | t | 1
entitet_p150000000 | entitet | t | 1
Make it a bit more informativ, together with other tables in the data dictionary. Put the following into a file called pg_tree_info.sql:
\echo myschema = :myschema
\echo mytable = :mytable
SELECT
s.schemaname,
s.relname AS table_name,
s.n_live_tup,
s.last_analyze,
s.last_autoanalyze
FROM pg_partition_tree(format('%I.%I', :'myschema', :'mytable')::regclass) pt
JOIN pg_class c
ON c.oid = pt.relid
JOIN pg_namespace n
ON n.oid = c.relnamespace
JOIN pg_stat_all_tables s
ON s.schemaname = n.nspname
AND s.relname = c.relname
ORDER BY s.n_live_tup DESC, s.last_analyze;
SELECT
pt.level,
pt.isleaf,
n.nspname,
c.relname
FROM pg_partition_tree(
format('%I.%I', :'myschema', :'mytable')::regclass
) pt
JOIN pg_class c ON c.oid = pt.relid
JOIN pg_namespace n ON n.oid = c.relnamespace
ORDER BY pt.level, c.relname;
Example output:
myschema = scott
mytable = entitet
schemaname | table_name | n_live_tup | last_analyze | last_autoanalyze
------------+--------------------+------------+-------------------------------+-------------------------------
ldksf | entitet_p30000000 | 14706380 | 2026-03-10 22:15:50.390363+01 | 2026-03-10 16:29:36.398134+01
ldksf | entitet_p0 | 12193064 | 2026-03-10 22:15:50.749426+01 | 2026-03-10 16:27:35.272815+01
ldksf | entitet_p60000000 | 5481387 | 2026-03-10 22:15:51.069335+01 | 2026-03-10 16:31:35.842357+01
ldksf | entitet_default | 0 | 2026-03-10 22:15:53.688216+01 |
ldksf | entitet_p180000000 | 0 | 2026-03-10 22:15:53.68893+01 |
level | isleaf | nspname | relname
-------+--------+----------+--------------------
0 | f | ldksf | entitet
1 | t | ldksf | entitet_default
1 | t | ldksf | entitet_p0
1 | t | ldksf | entitet_p120000000
1 | t | ldksf | entitet_p150000000
Excute it like this:
psql -h prod1.pgsql01.oric.no -d mydb -U scott -v myschema=ldksf -v mytable=entitet -f pg_tree_info.sql