greenplum分區表查看所占空間大小


在使用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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM