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获取所有分区中的行数?
任何想法都非常感谢!
简单的方法,如果子分区遵循命名方案:
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)
找到了一种方法来做到这一点:
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 命令以及表及其分区之间的父/子关系。
| 归档时间: |
|
| 查看次数: |
3011 次 |
| 最近记录: |