[英]How to get aggregate row count for sharded tables in citus postgres
要求是獲取 Citus Postgres 數據庫中所有分布式表的 reltuples 總和,格式如下所述。
當我運行以下命令時,查詢傳播到工作人員,並根據每個工作人員的分片計數,為每個表獲取結果:
SELECT result from run_command_on_workers( $cmd$ select json_agg(json_build_object(reltuples, relname)) from pg_class c join pg_catalog.pg_namespace n on n.oid=c.relnamespace where n.nspname not in ('citus', 'pg_toast', 'pg_catalog')
例如,結果由 <row_count, table_name_and_shardid> {10, table_A_shardid0}, {20,table_A_shardid1}, {15, table_B_shardid0}
是否可以組合來自table_A_shardid0
和table_A_shardid1
的計數,以便結果為{30, table_A}
您可以使用run_command_on_shards
查詢表的所有分片。 通過這種方式,您可以從分片中獲取所有 reltuple 值,並稍后在協調器中將它們組合以獲得您想要的格式。 您可以在Citus 官方文檔中了解有關該命令的更多信息
目錄表pg_dist_partition
存儲有關數據庫中哪些表被分發的元數據。
使用我上面解釋的內容,查詢看起來像這樣:
WITH shards_reltuples AS (
SELECT logicalrelid,
(run_command_on_shards(logicalrelid,
$$ SELECT reltuples FROM pg_class WHERE oid = '%s'::regclass::oid $$
)).result::real AS reltuples
FROM pg_dist_partition)
SELECT logicalrelid, sum(reltuples) AS reltuples
FROM shards_reltuples GROUP BY logicalrelid;
您可以在上面詳細說明以獲得所需的 json 格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.