這篇文章主要介紹了PostgreSQL中系統(tǒng)目錄表的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站是專業(yè)的吉州網(wǎng)站建設(shè)公司,吉州接單;提供做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行吉州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
PostgreSQL 的system catalogs 對(duì)我們來說主要的作用有那些,這里主要的作用可以歸結(jié)為,讓一些數(shù)據(jù)庫的事務(wù)更加的便捷和自動(dòng)的處理,例如找到?jīng)]有索引的表,發(fā)現(xiàn)數(shù)據(jù)庫中的objects 之間的依賴關(guān)系,對(duì)數(shù)據(jù)庫進(jìn)行一些健康的檢查,和信息收集的工作,這也就提供了一些數(shù)據(jù)庫系統(tǒng)監(jiān)控的解決方案和相關(guān)信息的供給。
OK 目的明確,所以學(xué)習(xí)這段知識(shí),可以幫助我們達(dá)到什么目的我們?cè)诳偨Y(jié)一下
1 解決DBA 的一些常見的問題的查找和系統(tǒng)運(yùn)行中的缺陷的問題
2 對(duì)于POSTGRESQL的系統(tǒng)的性能和問題的監(jiān)控,提供了明確的數(shù)值和指示
3 對(duì)于應(yīng)用系統(tǒng)建立后,系統(tǒng)中的一些OBJECTS 之間的關(guān)聯(lián)性的問題解決
書中提到,通過理解和熟悉存在在pg_catalog中的信息,來了解系統(tǒng)中的各個(gè)objects 如,tables , veiws ,functions indexes, foreign data wrapper (FDWs), triggers ,constratins ,rules , users , groups 等等這些信息,統(tǒng)稱我們叫他數(shù)據(jù)庫元信息。
我們以PG12為例, 新安裝的PG12中 pg_catalog的objects 共有63個(gè)。
當(dāng)然還有一些信息,夾雜在information_schema中
其中pg_class 是極其重要的一張表,其中存儲(chǔ)了系統(tǒng)的一些object 信息,表,索引,視圖,序列,物化視圖,組合的類型,Toast tables 等等
而在pg_class中通過一個(gè)字母來標(biāo)記,當(dāng)前的object 到底屬于哪個(gè)上面的類型
通過pg_class中的 relkind字段可以了解到每個(gè)object的實(shí)際的類型
這里就牽扯出另一個(gè)問題,如果這些objects 需要在pg_class中進(jìn)行記錄,則需要一個(gè)主鍵,PG中的pg_class是怎么通過主鍵來標(biāo)記每個(gè)objects
這也就是oid信息,pg_class中的主鍵就是 oid, 這里就需要進(jìn)行一個(gè)延展,在我知道表名,但不知道OID的情況怎么解決。下圖中就引入了另一個(gè)PG的信息轉(zhuǎn)換的方式 regclass
通過select 語句,我們將已經(jīng)知曉的OBJECT 名字用對(duì)應(yīng)的方式來體現(xiàn),例如是文本,就加單引號(hào),是數(shù)字就不需要加任何符合, 后面通過 ::regclass:: 作為中介符號(hào),最后oid 則是你要轉(zhuǎn)換后的信息的類型。
注:通過上面的操作我們掌握了一種信息轉(zhuǎn)換的方式。
SELECT c.oid FROM pg_class c join pg_namespace n ON
(c.relnamespace = n.oid) WHERE relname ='表名';
當(dāng)然通過其他的方式也可以查到相關(guān)的信息。
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');
同時(shí)系統(tǒng)中有關(guān)于表、索引、列、序列等的統(tǒng)計(jì)信息,通過這些統(tǒng)計(jì)信息也可以更深層次的了解系統(tǒng)的中一些情況。
下面會(huì)通過一些命令和案例,來表明怎么使用這些系統(tǒng)表或那些函數(shù)命令可以幫助我們或許什么樣的信息。
1 終止當(dāng)前所有和test數(shù)據(jù)庫有關(guān)的執(zhí)行的query, 例如當(dāng)前需要有效的進(jìn)行vacuum,所以現(xiàn)在需要對(duì)某些長時(shí)間無法完成的query,進(jìn)行清理。
這里我們會(huì)用到 pg_stat_activity ,通過這樣表可以查看當(dāng)前與PG有關(guān)的連接,但實(shí)際上在測(cè)試中,通過Python 連接到數(shù)據(jù)庫中,通過死循環(huán)執(zhí)行一些較簡(jiǎn)單的語句,語句很快執(zhí)行完畢,在pg_stat_activity中并沒有展示,所以pg_stat_activity 還是比較適合較長的運(yùn)行的語句的發(fā)現(xiàn)和分析。
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname =
current_database() AND pid <> pg_backend_pid() and usename = 'admin';
下圖是死循環(huán)中的查詢,在執(zhí)行完這條語句后,就被終止了,因?yàn)镾ESSION 被切斷了。 這里需要強(qiáng)調(diào)一點(diǎn) pid <> pg_backend_pid() 是必須要添加的,防止切斷系統(tǒng)中的關(guān)鍵的
例如下面畫紅線的位置的一些進(jìn)程。
所以了解和理解系統(tǒng)的表,并加以利用可以解決很多我們面臨的一些系統(tǒng)的問題。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“PostgreSQL中系統(tǒng)目錄表的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!