GP - Play with partition

List of tables that are partitioned and total number of partitions.

SELECT distinct m.schemaname||'.'||m.tablename "Relation Name", CASE WHEN p.tolpart IS NULL THEN 0 ELSE p.tolpart END AS "Total Parition", CASE WHEN s.tolsubpart IS NULL THEN 0 ELSE s.tolsubpart END AS "Total Subpartitions" FROM pg_partitions m LEFT JOIN (SELECT schemaname,tablename,count(*) tolpart FROM pg_partitions WHERE parentpartitiontablename IS NULL group by schemaname,tablename ) p ON p.schemaname=m.schemaname AND p.tablename=m.tablename LEFT JOIN (SELECT schemaname,tablename,count(*) tolsubpart FROM pg_partitions WHERE parentpartitiontablename IS NOT NULL group by schemaname,tablename) s ON s.schemaname=m.schemaname AND s.tablename=m.tablename ORDER BY 1;

If you are in need to get details of a specified table. Below sql will help in getting details;

SELECT p.schemaname||'.'||p.tablename "Relation Name", p.partitionschemaname||'.'||p.partitiontablename "Partition Table", p.partitionname "Name", p.partitiontype "Type", c.columnname "Partition Column", p.partitionlevel "Level", p.partitionrank "Rank", p.partitionposition "Position", CASE WHEN p.partitionisdefault='t' then 'YES' ELSE 'NO' END AS "Default" FROM pg_partitions p , pg_partition_columns c WHERE c.schemaname=p.schemaname AND c.tablename=p.tablename AND c.partitionlevel=p.partitionlevel AND (p.schemaname,p.tablename)=('<schemaname>','<tablename>');

If you are in need to get details of a table which is of `range` partition, Below sql will help in getting details;

SELECT p.schemaname||'.'||p.tablename "Relation Name", p.partitionschemaname||'.'||p.partitiontablename "Partition Table", p.partitionname "Name", p.partitiontype "Type", c.columnname "Partition Column", p.partitionrangestart "Start Range", CASE WHEN p.partitionstartinclusive='t' then 'YES' ELSE 'NO' END AS "Start Include", p.partitionrangeend "End Range", CASE WHEN p.partitionendinclusive='t' then 'YES' ELSE 'NO' END AS "End Include", CASE WHEN p.partitionisdefault='t' then 'YES' ELSE 'NO' END AS "Default" FROM pg_partitions p, pg_partition_columns c WHERE c.schemaname=p.schemaname AND c.tablename=p.tablename AND  c.partitionlevel=p.partitionlevel AND (p.schemaname,p.tablename)=('<schemaname>','<tablename>');

If you are in need to get details of a table which is of `list` partition, Below sql will help in getting details;

SELECT p.schemaname||'.'||p.tablename "Relation Name", p.partitionschemaname||'.'||p.partitiontablename "Partition Table", p.partitionname "Name", p.partitiontype "Type", c.columnname "Partition Column", p.partitionlistvalues "List Values", CASE WHEN p.partitionisdefault='t' then 'YES' ELSE 'NO' END AS "Default" FROM pg_partitions p , pg_partition_columns c WHERE c.schemaname=p.schemaname AND c.tablename=p.tablename AND  c.partitionlevel=p.partitionlevel AND (p.schemaname,p.tablename)=('<schemaname>','<tablename>');

Comments

Popular posts from this blog

How to set Optimizer at database level in greenplum

Changing the gpmon Password

IPMI Tool | IPMI Cheatsheet