PostgreSQL後設資料庫講解-物件(表、索引、函式、序列、檢視…)在哪裡、如何識別、如何求物件定義

德哥發表於2017-12-09

標籤

PostgreSQL , pg_stat , 實時質量監控


背景

PostgreSQL中,所有物件的定義都在後設資料庫中,詳見

https://www.postgresql.org/docs/10/static/catalogs.html

除了後設資料庫,還有一些管理函式,如下

https://www.postgresql.org/docs/10/static/functions-admin.html

下面簡單介紹一下後設資料庫的使用。

如何識別物件

1、識別臨時表、UNLOGGED TABLE、臨時表

select relname from pg_class where relpersistence=? and relkind=`r`;  

pg_class 的relpersistence用於識別表是什麼表(正常表、不記日誌表、臨時表)。 relkind用於識別是什麼物件類別(表、索引、序列、切片、檢視、物化檢視、複合型別、外部表、分割槽表)。

relpersistence	  
	 	p = permanent table, u = unlogged table, t = temporary table  
relkind	  
	 	r = ordinary table, i = index, S = sequence, t = TOAST table, v = view, m = materialized view, c = composite type, f = foreign table, p = partitioned table  

Greenplum 擴充套件

pg_class.relstorage 用於區分是什麼儲存

h = 堆表(heap)  
a = append only row儲存表  
c = append only column儲存表  

儲存過程

pg_proc

資料庫

pg_database

表空間

pg_tablespace

schema

pg_namespace

使用者

pg_roles

索引介面

pg_am

如何獲取物件定義

使用這些函式介面,可以獲得對應物件的定義。

pg_get_indexdef  
  
pg_get_functiondef  
  
pg_get_triggerdef  
  
pg_get_ruledef  
  
pg_get_viewdef  
  
pg_get_constraintdef  

例子

postgres=# select * from pg_get_indexdef(`idx_tbl2_1`::regclass);  
                 pg_get_indexdef                    
--------------------------------------------------  
 CREATE INDEX idx_tbl2_1 ON tbl2 USING btree (id)  
(1 row)  

參考

https://www.postgresql.org/docs/10/static/catalogs.html

https://www.postgresql.org/docs/10/static/functions-admin.html


相關文章