詳解PostgreSql資料庫物件資訊及應用
PostgreSql資料庫物件主要有資料庫、表、檢視、索引、schema、函式、觸發器等。PostgreSql提供了information_schema schema,其中包括返回資料庫物件的檢視。如使用者有訪問許可權,可以也在pg_catalog schema中查詢表、檢視等物件。
1. 查詢資料庫物件
下面通過示例分別展示如何查詢各種資料庫物件。
1.1 表查詢
PostgreSql 表資訊可以從information_schema.tables 或 pg_catalog.pg_tables 檢視中查詢:
select * from information_schema.tables; select * from pg_catalog.pg_tables;
1.2 查詢Schema
獲取使用者當前選擇的schema:
select current_schema();
返回資料庫中所有schema:
select * from information_schema.schemata; select * from pg_catalog.pg_namespace
1.3 查詢資料庫
查詢當前選擇的資料庫:
select current_database();
返回伺服器上所有資料庫:
select * from pg_catalog.pg_database
1.4 查詢檢視
查詢資料庫中所有schema中的所有檢視:
select * from information_schema.views select * from pg_catalog.pg_views;
1.5 查詢表的列資訊
查詢某個表的列資訊:
SELECT * FROM information_schema.columns WHERE table_name = 'employee' ORDER BY ordinal_position;
1.6 查詢索引資訊
查詢資料庫中所有索引資訊;
select * from pg_catalog.pg_indexes;
1.6 查詢函式資訊
返回資料庫中所有函式。對於使用者定義函式,routine_definition 列會有函式體:
select * from information_schema.routines where routine_type = 'FUNCTION';
1.7 觸發器
查詢資料庫中所有觸發器,action_statemen類別包括觸發器body資訊:
select * from information_schema.triggers;
2. 查詢表佔用空間
2.1 查詢表佔用空間
實際應用中,通常需要表佔用磁碟空間情況,我們可以利用系統表實現:
SELECT nspname || '.' || relname AS "relation",pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog','information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 5;
示例輸出:
relation | total_size |
---|---|
public.snapshots | 823 MB |
public.invoice_items | 344 MB |
public.messages | 267 MB |
public.topics | 40 MB |
public.invoices | 35 MB |
(5 rows)
2.2 查詢資料庫佔用空間
SELECT pg_database.datname AS "database_name",pg_size_pretty(pg_database_size (pg_database.datname)) AS size_in_mb FROM pg_database ORDER BY size_in_mb DESC;
2.3 查詢表的記錄數
可以通過統計系統表進行查詢:
SELECT schemaname,relname,n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC LIMIT 12;
順便說下MySQL對於查詢,讀者可以對比學習:
SELECT table_name,table_rows FROM information_schema.tables WHERE table_schema = (SELECT database()) ORDER BY table_rows DESC LIMIT 12;
4. 系統表和系統檢視
檢視資料庫系統表命令:
\dt pg_*
表名字 | 用途 |
---|---|
pg_aggregate | 聚集函式 |
pg_am | 索引訪問方法 |
pg_amop | 訪問方法操作符 |
pg_amproc | 訪問方法支援過程 |
pg_attrdef | 欄位預設值 |
pg_attribute | 表的列(也稱為”屬性”或”欄位”) |
pg_authid | 認證識別符號(角色) |
pg_auth_members | 認證識別符號成員關係 |
pg_autovacuum | 每個關係一個的自動清理配置引數 |
pg_cast | 轉換(資料型別轉換) |
pg_class | 表、索引、序列、檢視(“關係”) |
pg_constraint | 檢查約束、唯一約束、主鍵約束、外來鍵約束 |
pg_conversion | 編碼轉換資訊 |
pg_database | 本叢集內的資料庫 |
pg_depend | 資料庫物件之間的依賴性 |
pg_description | 資料庫物件的描述或註釋 |
pg_index | 附加的索引資訊 |
pg_inherits | 表繼承層次 |
pg_language | 用於寫函式的語言 |
pg_largeobject | 大物件 |
pg_listener | 非同步通知 |
pg_namespace | 模式 |
pg_opclass | 索引訪問方法操作符類 |
pg_operator | 操作符 |
pg_pltemplate | 過程語言使用的模板資料 |
pg_proc | 函式和過程 |
pg_rewrite | 查詢重寫規則 |
pg_shdepend | 在共享物件上的依賴性 |
pg_shdescription | 共享物件上的註釋 |
pg_statistic | 優化器統計 |
pg_tablespace | 這個資料庫叢集裡面的表空間 |
pg_trigger | 觸發器 |
pg_type | 資料型別 |
列出所有pg開頭的系統示圖:
\dv pg_*
檢視名 | 用途 |
---|---|
pg_cursors | 開啟的遊標 |
pg_group | 資料庫使用者的組 |
pg_indexes | 索引 |
pg_locks | 當前持有的鎖 |
pg_prepared_statements | 預備語句 |
pg_prepared_xacts | 預備事務 |
pg_roles | 資料庫角色 |
pg_rules | 規則 |
pg_settings | 引數設定 |
pg_shadow | 資料庫使用者 |
pg_stats | 規劃器統計 |
pg_tables | 表 |
pg_timezone_abbrevs | 時區縮寫 |
pg_timezone_names | 時區名 |
pg_user | 資料庫使用者 |
pg_views | 檢視 |
4. 總結
本文介紹PostgreSQL系統表及檢視;通過系統表或檢視查詢資料庫物件及常用統計資訊。
到此這篇關於PostgreSql資料庫物件資訊及應用的文章就介紹到這了,更多相關PostgreSql資料庫應用內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!