SELECT
c.relname,
c.relkind,
CASE WHEN c.relkind = 'r' THEN '普通表' WHEN c.relkind = 'p' THEN '分区表' WHEN c.relkind = 'f' THEN '外表' WHEN c.relkind = 'v' THEN '视图' WHEN c.relkind = 'm' THEN '物化视图' ELSE '其他'
END as table_type_desc
FROM
pg_class c
JOIN
pg_namespace n ON c.relnamespace = n.oid
WHERE
n.nspname = 'middle';
-- AND c.relname = %s
SELECT indexname as index_name,indexdef as index_definition,CASE WHEN indexdef LIKE '%%UNIQUE%%' THEN trueELSE falseEND as is_unique
FROM pg_indexes
WHERE schemaname = 'middle'-- AND tablename = %s
ORDER BY indexname;
pg_class 系统表信息
pg_class
是 PostgreSQL 中的一个关键系统目录表,它存储了关于数据库对象(主要是表和类似表的对象)的元数据信息。以下是 pg_class
包含的主要信息:
主要列信息
- 对象标识信息
-
oid
- 对象的对象标识符(OID)relname
- 对象名称relnamespace
- 包含该对象的命名空间的OID(对应pg_namespace)
- 对象类型信息
-
relkind
- 对象类型标识:
-
-
r
= 普通表i
= 索引S
= 序列v
= 视图c
= 复合类型t
= TOAST表m
= 物化视图p
= 分区表I
= 分区索引
-
- 存储信息
-
relfilenode
- 对象在磁盘上的文件名(0表示特殊关系)reltablespace
- 对象所在的表空间OID
- 统计信息
-
relpages
- 磁盘页数(估算值)reltuples
- 行数(估算值)
- 权限信息
-
relacl
- 访问权限
- 约束和选项
-
relhasindex
- 是否有索引relhasrules
- 是否有规则relhastriggers
- 是否有触发器relhasoids
- 是否有OID列relfrozenxid
- 冻结事务IDrelminmxid
- 最小多事务ID
- 继承信息
-
relispartition
- 是否为分区relpartbound
- 分区边界
查询示例
-- 查看所有表的基本信息
SELECT relname, relkind, reltuples, relpages
FROM pg_class
WHERE relkind = 'r';-- 查看特定表的详细信息
SELECT * FROM pg_class WHERE relname = 'your_table_name';
pg_class
是 PostgreSQL 系统目录中最重要的表之一,它提供了数据库对象的基础元数据,是许多系统查询和管理的核心。