1. 程式人生 > 資料庫 >詳解PostgreSql資料庫物件資訊及應用

詳解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資料庫應用內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!