Postgresql 系統(tǒng)表作用解釋
?postgresql 系統(tǒng)表有哪些,作用是什么
了解 PostgreSQL 的系統(tǒng)表(System Catalogs)有哪些,以及它們各自的核心作用。PostgreSQL 的系統(tǒng)表是存儲數(shù)據(jù)庫元數(shù)據(jù)(如表、字段、索引、約束、用戶等信息)的核心表,所有數(shù)據(jù)庫對象的定義都記錄在這里,我會按功能分類梳理核心系統(tǒng)表,并說明它們的作用和常用場景。
一、核心系統(tǒng)表分類及作用
PostgreSQL 的系統(tǒng)表都位于 pg_catalog 模式下(可省略模式名直接查詢),以下是最常用的核心表,按功能分組:
1. 數(shù)據(jù)庫與模式相關(guān)
| 系統(tǒng)表名 | 核心作用 |
|---|---|
| pg_database | 存儲數(shù)據(jù)庫實例中所有數(shù)據(jù)庫的信息(如數(shù)據(jù)庫名、OID、所有者、編碼、表空間) |
| pg_namespace | 存儲數(shù)據(jù)庫中的所有模式(Schema) 信息(如模式名、OID、所有者、權(quán)限) |
查詢示例:
-- 查看所有數(shù)據(jù)庫 SELECT datname, datowner, encoding FROM pg_database; -- 查看當(dāng)前數(shù)據(jù)庫的所有模式 SELECT nspname, nspowner FROM pg_namespace;
2. 表 / 視圖 / 索引等對象相關(guān)
| 系統(tǒng)表名 | 核心作用 |
|---|---|
| pg_class | 存儲所有關(guān)系型對象(表、視圖、索引、序列、物化視圖等)的核心信息,是最核心的系統(tǒng)表之一 |
| pg_attribute | 存儲所有字段(列) 的信息(如字段名、所屬表 OID、數(shù)據(jù)類型、是否可為空、默認(rèn)值) |
| pg_type | 存儲所有數(shù)據(jù)類型的信息(內(nèi)置類型如 int/text,自定義類型都在這里) |
關(guān)鍵說明:
- pg_class.relkind 字段區(qū)分對象類型:r= 普通表,v= 視圖,i= 索引,s= 序列,m= 物化視圖。
- pg_attribute.attnum 為字段編號(>0 是普通字段,0 是表 oid,-1/-2 是系統(tǒng)隱藏字段)。
查詢示例:
-- 查看 public 模式下的所有普通表
SELECT relname AS table_name
FROM pg_class
WHERE relkind = 'r'
AND relnamespace = (SELECT oid
FROM pg_namespace
WHERE nspname = 'public');
-- 查看 users 表的所有字段及類型
SELECT
a.attname AS column_name,
t.typname AS data_type,
a.attnotnull AS is_not_null
FROM pg_attribute a
JOIN pg_type t ON a.atttypid = t.oid
WHERE a.attrelid = (SELECT oid
FROM pg_class WHERE relname = 'users')
AND a.attnum > 0;
3. 約束與索引相關(guān)
| 系統(tǒng)表名 | 核心作用 |
|---|---|
| pg_constraint | 存儲所有約束信息(主鍵、外鍵、唯一約束、檢查約束、默認(rèn)值約束) |
| pg_index | 存儲索引的詳細(xì)信息(所屬表、索引字段、是否唯一、是否主鍵、索引類型) |
關(guān)鍵說明:
- pg_constraint.contype 區(qū)分約束類型:p= 主鍵,u= 唯一約束,f= 外鍵,c= 檢查約束,d= 默認(rèn)值約束。
- pg_index.indisunique = true 表示唯一索引,indisprimary = true 表示主鍵索引。
查詢示例:
-- 查看 users 表的所有約束 SELECT conname, contype, conkey FROM pg_constraint WHERE conrelid = (SELECT oid FROM pg_class WHERE relname = 'users'); -- 查看 users 表的所有唯一索引 SELECT indexrelname AS index_name FROM pg_index JOIN pg_class t ON pg_index.indrelid = t.oid WHERE t.relname = 'users' AND indisunique = true;
4. 用戶與權(quán)限相關(guān)
| 系統(tǒng)表名 | 核心作用 |
|---|---|
| pg_roles | 存儲數(shù)據(jù)庫中所有角色 / 用戶 / 組的信息(用戶名、密碼哈希、權(quán)限、是否超級用戶) |
| pg_authid | 與 pg_roles 類似,但包含敏感信息(如密碼),僅超級用戶可訪問 |
| pg_permissions | 存儲對象的權(quán)限分配信息(哪些用戶對哪些對象有哪些權(quán)限) |
查詢示例:
-- 查看所有用戶 SELECT rolname, rolsuper, rolcreaterole FROM pg_roles; -- 查看 users 表的權(quán)限分配 SELECT grantee, privilege_type FROM information_schema.table_privileges WHERE table_name = 'users';
5. 其他常用系統(tǒng)表
| 系統(tǒng)表名 | 核心作用 |
|---|---|
| pg_tablespace | 存儲表空間信息(數(shù)據(jù)庫物理存儲位置) |
| pg_stat_user_tables | 存儲用戶表的統(tǒng)計信息(如行數(shù)、讀寫次數(shù)、掃描次數(shù),用于性能分析) |
| pg_locks | 存儲當(dāng)前數(shù)據(jù)庫的鎖信息(排查鎖等待、死鎖問題) |
| pg_stat_activity | 存儲當(dāng)前數(shù)據(jù)庫連接 / 會話信息(誰在連接、執(zhí)行什么 SQL、狀態(tài)) |
查詢示例:
-- 查看當(dāng)前所有活躍會話 SELECT usename, datname, query, state FROM pg_stat_activity WHERE state = 'active'; -- 查看表的行數(shù)和讀寫統(tǒng)計 SELECT relname, n_live_tup AS row_count, seq_scan AS full_scan_count FROM pg_stat_user_tables WHERE relname = 'users';
二、信息模式(Information Schema):更友好的元數(shù)據(jù)查詢方式
除了原生系統(tǒng)表,PostgreSQL 還提供了 Information Schema(信息模式),它是符合 SQL 標(biāo)準(zhǔn)的視圖集合,封裝了底層系統(tǒng)表,語法更通用、更易讀,適合跨數(shù)據(jù)庫兼容場景。
常用的信息模式視圖:
- information_schema.tables:查詢表信息
- information_schema.columns:查詢字段信息
- information_schema.table_constraints:查詢約束信息
- information_schema.indexes:查詢索引信息
示例:
-- 用信息模式查詢 users 表的字段 SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = 'users' AND table_schema = 'public';
三、系統(tǒng)表使用建議
- 新手優(yōu)先用信息模式:語法更通用,無需記憶系統(tǒng)表的 OID 關(guān)聯(lián)邏輯,降低學(xué)習(xí)成本。
- 高級場景用原生系統(tǒng)表:如需獲取更底層的信息(如索引物理屬性、鎖詳情),原生系統(tǒng)表更全面。
- 避免直接修改系統(tǒng)表:系統(tǒng)表由 PostgreSQL 自動維護(hù),手動修改可能導(dǎo)致數(shù)據(jù)庫損壞,管理對象應(yīng)使用
CREATE/ALTER/DROP命令。 - 常用元數(shù)據(jù)查詢可封裝函數(shù):比如封裝 “查詢表的所有約束”“查詢表的索引” 等函數(shù),簡化日常使用。
總結(jié)
- 核心系統(tǒng)表分類:數(shù)據(jù)庫 / 模式(pg_database/pg_namespace)、表 / 字段(pg_class/pg_attribute)、約束 / 索引(pg_constraint/pg_index)、用戶 / 權(quán)限(pg_roles/pg_permissions)、監(jiān)控 / 鎖(pg_stat_activity/pg_locks)是最常用的幾類。
- 信息模式優(yōu)勢:基于系統(tǒng)表封裝的標(biāo)準(zhǔn)視圖,語法通用、易讀,適合新手和跨數(shù)據(jù)庫場景。
- 使用原則:系統(tǒng)表用于查詢元數(shù)據(jù),禁止手動修改;優(yōu)先用信息模式,底層需求用原生系統(tǒng)表。
?到此這篇關(guān)于Postgresql 系統(tǒng)表作用解釋的文章就介紹到這了,更多相關(guān)Postgresql 系統(tǒng)表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL 實現(xiàn)定時job執(zhí)行(pgAgent)
這篇文章主要介紹了PostgreSQL 實現(xiàn)定時job執(zhí)行(pgAgent),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
postgresql數(shù)據(jù)添加兩個字段聯(lián)合唯一的操作
這篇文章主要介紹了postgresql數(shù)據(jù)添加兩個字段聯(lián)合唯一的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Postgresql 動態(tài)統(tǒng)計某一列的某一值出現(xiàn)的次數(shù)實例
這篇文章主要介紹了Postgresql 動態(tài)統(tǒng)計某一列的某一值出現(xiàn)的次數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL12同步流復(fù)制搭建及主備切換方式
這篇文章主要介紹了PostgreSQL12同步流復(fù)制搭建及主備切換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03

