簡體   English   中英

如何在 citus postgres 中獲取分片表的聚合行數

[英]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_shardid0table_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM