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

