You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中的OID
    • attrnums:存储分布键对应的列编号数组,可关联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,提问作者Илья Малов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:54:56