PostgreSQL 讀書會 一期 系統目錄表 1

最近經歷了一些事情,貌似也更深層的懂得了一些之前就“懂得”的道理,也理解了之前一些不能理解的人和事。最近也反思之前所做的一切,其實都和愛有關,喬布斯曾經說過,如果你愛他,你能更深層次的切入,因爲任何一件事情如果想深層次的理解,都和你愛不愛他有關,越往深層次去做,越枯燥,越難受,只有你愛了他,才能繼續走下去。  這也是爲什麼大部分“混社會”的人都只能叫,從業者,而不是專家的原因之一吧。

所以從今天開始,將通過讀一些PG的書繼續,之前的一些東西的知識碎片化嚴重,這就造成了,看似什麼都懂,但細緻的問,內部虛弱的原因。

今天的主題是postgresql  系統目錄表,並通過書中的內容儘量的展開相關的延展。延展和自我加工的東西將通過加粗表示, 關於是哪本書不重要,所讀的書也會根據相關情況不斷變化.

———————————————————————————————

PostgreSQL 的system catalogs 對我們來說主要的作用有那些,這裏主要的作用可以歸結爲,讓一些數據庫的事務更加的便捷和自動的處理,例如找到沒有索引的表,發現數據庫中的objects 之間的依賴關係,對數據庫進行一些健康的檢查,和信息收集的工作,這也就提供了一些數據庫系統監控的解決方案和相關信息的供給。

OK 目的明確,所以學習這段知識,可以幫助我們達到什麼目的我們在總結一下

1  解決DBA 的一些常見的問題的查找和系統運行中的缺陷的問題

2  對於POSTGRESQL的系統的性能和問題的監控,提供了明確的數值和指示

3  對於應用系統建立後,系統中的一些OBJECTS 之間的關聯性的問題解決

書中提到,通過理解和熟悉存在在pg_catalog中的信息,來了解系統中的各個objects 如,tables , veiws ,functions indexes, foreign data wrapper (FDWs), triggers ,constratins ,rules , users , groups 等等這些信息,統稱我們叫他數據庫元信息。

我們以PG12爲例, 新安裝的PG12中 pg_catalog的objects 共有63個。

當然還有一些信息,夾雜在information_schema中


其中pg_class 是極其重要的一張表,其中存儲了系統的一些object 信息,表,索引,視圖,序列,物化視圖,組合的類型,Toast tables 等等

而在pg_class中通過一個字母來標記,當前的object 到底屬於哪個上面的類型

通過pg_class中的 relkind字段可以瞭解到每個object的實際的類型

這裏就牽扯出另一個問題,如果這些objects 需要在pg_class中進行記錄,則需要一個主鍵,PG中的pg_class是怎麼通過主鍵來標記每個objects 

這也就是oid信息,pg_class中的主鍵就是 oid, 這裏就需要進行一個延展,在我知道表名,但不知道OID的情況怎麼解決。下圖中就引入了另一個PG的信息轉換的方式 regclass

通過select 語句,我們將已經知曉的OBJECT 名字用對應的方式來體現,例如是文本,就加單引號,是數字就不需要加任何符合, 後面通過 ::regclass:: 作爲中介符號,最後oid 則是你要轉換後的信息的類型。

注:通過上面的操作我們掌握了一種信息轉換的方式。

SELECT c.oid FROM pg_class c join pg_namespace n ON

(c.relnamespace = n.oid) WHERE relname ='表名';

當然通過其他的方式也可以查到相關的信息。

SELECT relname, case relkind when 'r' then 'table' WHEN 'v' THEN 'VIEW' END as type FROM pg_class WHERE relname like 'pg_sta%' AND relkind IN ('r','v');

同時系統中有關於表、索引、列、序列等的統計信息,通過這些統計信息也可以更深層次的瞭解系統的中一些情況。

下面會通過一些命令和案例,來表明怎麼使用這些系統表或那些函數命令可以幫助我們或許什麼樣的信息。

1  終止當前所有和test數據庫有關的執行的query, 例如當前需要有效的進行vacuum,所以現在需要對某些長時間無法完成的query,進行清理。

這裏我們會用到 pg_stat_activity ,通過這樣表可以查看當前與PG有關的連接,但實際上在測試中,通過Python 連接到數據庫中,通過死循環執行一些較簡單的語句,語句很快執行完畢,在pg_stat_activity中並沒有展示,所以pg_stat_activity 還是比較適合較長的運行的語句的發現和分析。

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname =

current_database() AND pid <> pg_backend_pid() and usename = 'admin';

下圖是死循環中的查詢,在執行完這條語句後,就被終止了,因爲SESSION 被切斷了。 這裏需要強調一點  pid <> pg_backend_pid() 是必須要添加的,防止切斷系統中的關鍵的

例如下面畫紅線的位置的一些進程。

所以瞭解和理解系統的表,並加以利用可以解決很多我們面臨的一些系統的問題。

未完待......  2    目前頁數:291頁

相關的書籍,可以在以下羣裏獲得電子版

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章