Postgres - 分区表中的近似行数

San*_*uye 2 sql postgresql database-partitioning

我正在寻找一种方法来估算分区表中的行数。count(*)由于数据的大小,我想避免使用。我尝试使用这个:

SELECT reltuples FROM pg_class WHERE relname = 'my_table_name';
Run Code Online (Sandbox Code Playgroud)

但它总是返回zero。我假设这是因为该表已分区。

有没有办法用来pg_class/pg_inherits获取所有分区中的行数?

任何想法都非常感谢!

luc*_*ell 5

简单的方法,如果子分区遵循命名方案:

SELECT schemaname,relname,n_live_tup
FROM pg_stat_user_tables
where relname like 'my_table_%'
ORDER BY relname DESC ;
Run Code Online (Sandbox Code Playgroud)


San*_*uye 4

找到了一种方法来做到这一点:

            SELECT
                SUM(child.reltuples)    AS number_of_records_all_partitions
            FROM pg_inherits
                JOIN pg_class parent            ON pg_inherits.inhparent = parent.oid
                JOIN pg_class child             ON pg_inherits.inhrelid   = child.oid
                JOIN pg_namespace nmsp_parent   ON nmsp_parent.oid  = parent.relnamespace
                JOIN pg_namespace nmsp_child    ON nmsp_child.oid   = child.relnamespace
            WHERE parent.relname = 'my_table_name';
Run Code Online (Sandbox Code Playgroud)

我还使用系统 ANALYZE 命令以及表及其分区之间的父/子关系。