1+ CREATE OR REPLACE VIEW "ALL_PART_TABLES " AS
2+ WITH " PARTITION_DETAILS" AS (
3+ SELECT
4+ parent_ns .nspname AS " OWNER" ,
5+ parent .relname AS " TABLE_NAME" ,
6+ parent .oid AS " PARENT_OID" ,
7+ count (child .oid ) AS " PARTITION_COUNT" , -- Count partitions
8+ pg_partitioned_table .partstrat AS " PARTSTRAT" , -- Partition strategy (RANGE, LIST, HASH)
9+ pg_partitioned_table .partattrs AS " PARTITION_COLUMNS" -- Column numbers involved in partitioning
10+ FROM
11+ pg_inherits i
12+ JOIN pg_class child ON child .oid = i .inhrelid
13+ JOIN pg_class parent ON parent .oid = i .inhparent
14+ JOIN pg_namespace parent_ns ON parent .relnamespace = parent_ns .oid
15+ JOIN pg_partitioned_table ON parent .oid = pg_partitioned_table .partrelid
16+ WHERE
17+ parent .relkind = ' p' -- Only partitioned tables
18+ GROUP BY
19+ parent_ns .nspname , parent .relname , parent .oid , pg_partitioned_table .partstrat , pg_partitioned_table .partattrs
20+ ),
21+ " PARTITIONING_KEYS" AS (
22+ SELECT
23+ ppt .partrelid AS " PARENT_OID" ,
24+ -- Count the number of partitioning columns by counting entries in partattrs
25+ array_length(ppt .partattrs , 1 ) AS " PARTITIONING_KEY_COUNT"
26+ FROM
27+ pg_partitioned_table ppt
28+ WHERE
29+ ppt .partattrs IS NOT NULL -- Only count if there are partition columns
30+ )
31+ SELECT
32+ pd." OWNER" ,
33+ pd." TABLE_NAME" ,
34+ pd." PARTITION_COUNT" ,
35+ pk." PARTITIONING_KEY_COUNT" ,
36+ CASE
37+ WHEN pd." PARTSTRAT" = ' r' THEN ' RANGE'
38+ WHEN pd." PARTSTRAT" = ' l' THEN ' LIST'
39+ WHEN pd." PARTSTRAT" = ' h' THEN ' HASH'
40+ ELSE ' UNKNOWN'
41+ END AS " PARTITIONING_TYPE"
42+ FROM
43+ " PARTITION_DETAILS" pd
44+ JOIN
45+ " PARTITIONING_KEYS" pk ON pd." PARENT_OID" = pk." PARENT_OID"
46+ ORDER BY
47+ pd." OWNER" , pd." TABLE_NAME" ;
0 commit comments