PostgreSQL/Hologres 系统表 pg_class 详解

sql 复制代码
SELECT HG_DUMP_SCRIPT('pg_class');

BEGIN;

/*
DROP TABLE pg_catalog.pg_class;
*/

-- Type: TABLE ; Name: pg_class; Owner: holo_admin

CREATE TABLE pg_catalog.pg_class (
    relname name NOT NULL,
    relnamespace oid NOT NULL,
    reltype oid NOT NULL,
    reloftype oid NOT NULL,
    relowner oid NOT NULL,
    relam oid NOT NULL,
    relfilenode oid NOT NULL,
    reltablespace oid NOT NULL,
    relpages integer NOT NULL,
    reltuples real NOT NULL,
    relallvisible integer NOT NULL,
    reltoastrelid oid NOT NULL,
    relhasindex boolean NOT NULL,
    relisshared boolean NOT NULL,
    relpersistence "char" NOT NULL,
    relkind "char" NOT NULL,
    relnatts smallint NOT NULL,
    relchecks smallint NOT NULL,
    relhasoids boolean NOT NULL,
    relhasrules boolean NOT NULL,
    relhastriggers boolean NOT NULL,
    relhassubclass boolean NOT NULL,
    relrowsecurity boolean NOT NULL,
    relforcerowsecurity boolean NOT NULL,
    relispopulated boolean NOT NULL,
    relreplident "char" NOT NULL,
    relispartition boolean NOT NULL,
    relrewrite oid NOT NULL,
    relfrozenxid xid NOT NULL,
    relminmxid xid NOT NULL,
    relacl aclitem[],
    reloptions text[],
    relpartbound pg_node_tree
)
  WITH OIDS;



COMMENT ON TABLE pg_catalog.pg_class IS NULL;
ALTER TABLE pg_catalog.pg_class OWNER TO holo_admin;


END;

pg_class 是 PostgreSQL/Hologres 中最重要的系统目录表之一,它记录了数据库中所有表、索引、序列、视图、物化视图等关系(relation)的元数据信息。

pg_class 的主要作用

  1. 存储所有数据库对象的结构信息 :包括表、索引、序列、视图、物化视图、复合类型等
  2. 维护对象之间的关系:如表与索引的关联
  3. 记录对象的物理存储特性:如存储方式、大小等
  4. 提供对象访问控制的基础:包含所有权和权限信息

pg_class 字段定义详解

您通过 SELECT HG_DUMP_SCRIPT('pg_class'); 获取的字段定义如下:

复制代码
CREATE TABLE pg_catalog.pg_class (
    relname name NOT NULL,               -- 关系(表/索引等)的名称
    relnamespace oid NOT NULL,           -- 包含此关系的命名空间(模式)的OID
    reltype oid NOT NULL,                -- 对应pg_type中此关系行类型的OID
    reloftype oid NOT NULL,              -- 对于复合类型的关系,底层类型的OID
    relowner oid NOT NULL,               -- 关系所有者的OID
    relam oid NOT NULL,                  -- 索引使用的访问方法(普通表为0)
    relfilenode oid NOT NULL,            -- 关系的磁盘文件节点号
    reltablespace oid NOT NULL,          -- 关系存储的表空间OID
    relpages integer NOT NULL,           -- 磁盘页面数(估算值)
    reltuples real NOT NULL,             -- 元组数(估算值)
    relallvisible integer NOT NULL,      -- 全部可见的页面数
    reltoastrelid oid NOT NULL,         -- TOAST表的OID(如果有)
    relhasindex boolean NOT NULL,        -- 是否有索引
    relisshared boolean NOT NULL,        -- 是否在集群中所有数据库共享
    relpersistence "char" NOT NULL,      -- p=永久表,u=非日志表,t=临时表
    relkind "char" NOT NULL,             -- r=普通表,i=索引,S=序列,v=视图等
    relnatts smallint NOT NULL,          -- 用户列数(不包括系统列)
    relchecks smallint NOT NULL,         -- CHECK约束的数量
    relhasoids boolean NOT NULL,         -- 是否有OID列
    relhasrules boolean NOT NULL,        -- 是否有规则
    relhastriggers boolean NOT NULL,     -- 是否有触发器
    relhassubclass boolean NOT NULL,     -- 是否有子表
    relrowsecurity boolean NOT NULL,     -- 是否有行级安全策略
    relforcerowsecurity boolean NOT NULL,-- 行级安全是否强制启用
    relispopulated boolean NOT NULL,     -- 关系数据是否已填充
    relreplident "char" NOT NULL,        -- 复制标识选择
    relispartition boolean NOT NULL,     -- 是否是分区
    relrewrite oid NOT NULL,             -- 对于重写过的表,原始表的OID
    relfrozenxid xid NOT NULL,           -- 在此之前的所有事务ID已被冻结
    relminmxid xid NOT NULL,             -- 在此之前的所有多事务ID已被冻结
    relacl aclitem[],                    -- 访问权限
    reloptions text[],                   -- 访问方法相关的选项
    relpartbound pg_node_tree            -- 分区边界
) WITH OIDS;

关键字段说明

  1. relkind:标识关系类型
    • r = 普通表
    • i = 索引
    • S = 序列
    • v = 视图
    • c = 复合类型
    • t = TOAST表
    • m = 物化视图
  1. relpersistence:持久性标识
    • p = 永久表
    • u = 非日志表
    • t = 临时表
  1. relnamespace :关联到pg_namespace表,表示模式(schema)
  2. relowner :关联到pg_authid表,表示所有者

注意事项

  1. 不要直接修改pg_class:这会导致数据库损坏
  2. **查询时使用信息模式(INFORMATION_SCHEMA)**更安全
  3. Hologres对PostgreSQL系统表有扩展:部分字段含义可能有所不同

您可以通过查询pg_class来获取数据库对象的元信息,例如:

sql 复制代码
-- 查看数据库中所有表
SELECT relname FROM pg_class WHERE relkind = 'r' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public');

-- 查看表的大小信息
SELECT relname, relpages, reltuples FROM pg_class WHERE relname = 'your_table';
相关推荐
@insist1238 分钟前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
天辛大师11 分钟前
AI助力旅游扩大化,五一旅游公园通游年票普惠研究
大数据·启发式算法·旅游
WordPress学习笔记40 分钟前
镌刻中式美学的高端WordPress主题
大数据·人工智能·wordpress
数智化精益手记局2 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
Elastic 中国社区官方博客3 小时前
使用 Observability Migration Platform 将 Datadog 和 Grafana 的仪表板与告警迁移到 Kibana
大数据·elasticsearch·搜索引擎·信息可视化·全文检索·grafana·datalog
jkyy20144 小时前
AI运动数字化:以技术重塑场景,健康有益赋能全域运动健康管理
大数据·人工智能·健康医疗
金融小师妹4 小时前
4月30日多因子共振节点:鲍威尔“收官效应”与权力结构重塑的预期重构
大数据·人工智能·重构·逻辑回归
2601_949925184 小时前
AI Agent如何重构跨境物流的决策?
大数据·人工智能·重构·ai agent·geo优化·物流科技
xiaoduo AI4 小时前
客服机器人问题解决率怎么统计?Agent系统自动判断是否解决,比人工回访准?
大数据·人工智能·机器人
小五兄弟5 小时前
YouTube 肖像检测扩展背后:短剧出海版权保护的技术实现与实战策略
大数据·人工智能