greenplum分区表查看所占空间大小

本文介绍如何在Greenplum数据库中计算分区表的实际占用空间,通过自定义函数解决传统方法在分区表上的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用greenplum数据库的时候,有的时候想要查看表所占用空间的大小,会使用如下二个函数pg_relation_size和pg_size_pretty. 

前者用来查看数据大小,后者是human readable的调整.方法如下:

select pg_size_pretty(pg_relation_size('relation_name')) ;

select pg_size_pretty(pg_relation_size(oid)) ;
但是,对于分区表而言,这个方法就没有用了,会发现使用后表的大小为0bytes.原因在于:GP的分区表的主表只是一个表定义,其实际数据内容存储在继承父表的分区子表里面了.上网查了一下,没发现有相应的函数,干脆写了个函数来实现.

 

复制代码
--  Function: calc_partition_table(character varying, character varying)

--  DROP FUNCTION calc_partition_table(character varying, character varying);

CREATE  OR  REPLACE  FUNCTION calc_partition_table(v_schemaname  character  varying, v_tablename  character  varying)
   RETURNS  bigint  AS
$BODY$
DECLARE
    v_calc  BIGINT : =  0;
    v_total  BIGINT : =  0;
    v_tbname  VARCHAR( 200);
    cur_tbname  cursor  for  select schemaname || ' . ' ||partitiontablename  as tb  from pg_partitions
    where schemaname =v_schemaname  and tablename =v_tablename;
BEGIN
     OPEN cur_tbname;
    loop
         FETCH cur_tbname  into v_tbname;
         if  not found  THEN
             exit;
         end  if;
         EXECUTE  ' select pg_relation_size( ''' ||v_tbname || ''' ) '  into v_calc;
        v_total: =v_total +v_calc;        
     end loop;
     CLOSE cur_tbname;
     RETURN v_total;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE;
ALTER  FUNCTION calc_partition_table( character  varyingcharacter  varying) OWNER  TO gpadmin;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值