PostgreSQL的DISTRIBUTED BY设置存储于pg_catalog的哪个表/视图?
查找分布式PostgreSQL(如Greenplum)中DISTRIBUTED BY设置的系统表位置
DISTRIBUTED BY是Greenplum、HAWQ这类分布式PostgreSQL衍生版本的特性,标准PostgreSQL无此机制,对应的配置信息存储在以下系统对象中:
核心存储表:
pg_catalog.pg_distribution_policy
这是存储分布键配置的底层表,包含两个关键字段:localoid:关联目标表在pg_catalog.pg_class中的OIDattrnums:存储分布键对应的列编号数组,可关联pg_catalog.pg_attribute获取列名
友好查询视图:
pg_catalog.pg_distributed_table
这个视图已经关联了pg_class和pg_distribution_policy,可以直接查看表名、分布类型(哈希/随机)和分布键名称,无需手动关联多表。
查询示例
-- 用pg_distributed_table快速查看指定表的分布配置 SELECT tablename, disttype, distkey FROM pg_catalog.pg_distributed_table WHERE tablename = 'your_target_table'; -- 直接查询底层表并关联得到分布键名称 SELECT c.relname AS tablename, array_agg(a.attname ORDER BY array_position(p.attrnums, a.attnum)) AS distribution_keys FROM pg_catalog.pg_distribution_policy p JOIN pg_catalog.pg_class c ON p.localoid = c.oid JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid AND a.attnum = ANY(p.attrnums) WHERE c.relname = 'your_target_table' GROUP BY c.relname;
注意:如果表采用默认的DISTRIBUTED RANDOMLY策略,pg_distribution_policy中不会有对应记录,但pg_distributed_table的disttype字段会显示为r(代表random)。
内容的提问来源于stack exchange,提问作者Илья Малов
相关产品推荐
相关产品推荐

