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 系統目錄中最重要的表之一,它提供了數據庫對象的基礎元數據,是許多系統查詢和管理的核心。