溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PostgreSQL如何實現(xiàn)臨時表

發(fā)布時間:2021-11-26 09:22:02 來源:億速云 閱讀:1773 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下PostgreSQL如何實現(xiàn)臨時表,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

說到臨時表,使用MYSQL的同學可能不是很常用,尤其是互聯(lián)網(wǎng)領(lǐng)域的,臨時表在MYSQL 的主從復制環(huán)境中使用臨時表本身是有缺陷的(這還的扯到程序當中去,解釋起來比較復雜)。今天的主題是Postgresql 的臨時表,Postgresql 的臨時表本身是事帶有隔離性的,與ORACLE 不同的是,PostgreSQL的臨時表本身更徹底,在SESSION失效后,表的定義都會消失,ORACLE 則不是,表的定義不會消失。這也是兩種數(shù)據(jù)庫在臨時表上的區(qū)別。

我們可以下載做一個測試,我們開兩個窗口

PostgreSQL如何實現(xiàn)臨時表

PostgreSQL如何實現(xiàn)臨時表

在此之外,我們在開一個窗口

PostgreSQL如何實現(xiàn)臨時表

首先證明了每個session 中的臨時表都是獨立的,在別的SESSION 中是看不到的。

另外PostgreSQL 中的臨時表還有一些相關(guān)方便的設(shè)置,在創(chuàng)建時指定臨時表的在什么時候消失或者清理數(shù)據(jù)。

相關(guān)postgresql 可以在 commit 中進行設(shè)置例如

ON COMMIT DELETE ROWS;
ON COMMIT DROP;
ON COMMIT PRESERVE ROWS;

這三種分別代表不同的含義,一個是在SESSION內(nèi),如果COMMIT 就直接將臨時表中的行刪除 , DROP 是直接commit 后就將表刪除,最后是即使commit 也保留表,直到session結(jié)束。

另外POSTGRESQL 中的并行掃描,對臨時表是無效的。還有一個有意思的事情時,如果你在同一個事務(wù)中創(chuàng)建了同名的臨時表 和 實體表,則你訪問的和操作的都是臨時表優(yōu)先。

PostgreSQL如何實現(xiàn)臨時表

另外有一個地方需要討論的是,臨時表在復雜事務(wù)中到底幫了我們多少,

 臨時表可以降低多表進行關(guān)聯(lián)造成的查詢復雜性和性能的問題

例如:臨時表可以在程序快速調(diào)用存儲過程中,分解對大表的訪問和查詢,將中間的結(jié)果存儲在臨時表中,而不是多個大表進行關(guān)聯(lián),如果我們僅僅需要查詢大表中1%的記錄,同時可以通過條件來現(xiàn)將大表1%的數(shù)據(jù)或更少的數(shù)據(jù)存儲在臨時表里面,在進行相關(guān)的連接,聚合,等操作,會大大減少例如鎖等待,死鎖,等可能性。

另外和有些數(shù)據(jù)庫不同,PG的臨時表會創(chuàng)建在你當前操作的數(shù)據(jù)庫中,并且以t 開頭進行命名(這里指的是在臨時表的物理存儲空間的名字)

所以更好的利用歷史表,能讓你的例如存儲過程,乃至是程序設(shè)計都能提升一個層次,當然如果濫用歷史表,在不恰當?shù)膱鼍斑M行使用,則會事倍功半的結(jié)果。

PostgreSQL如何實現(xiàn)臨時表

PostgreSQL如何實現(xiàn)臨時表

看完了這篇文章,相信你對“PostgreSQL如何實現(xiàn)臨時表”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI