您好,登錄后才能下訂單哦!
小編給大家分享一下PostgreSQL如何實現臨時表,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
說到臨時表,使用MYSQL的同學可能不是很常用,尤其是互聯網領域的,臨時表在MYSQL 的主從復制環境中使用臨時表本身是有缺陷的(這還的扯到程序當中去,解釋起來比較復雜)。今天的主題是Postgresql 的臨時表,Postgresql 的臨時表本身是事帶有隔離性的,與ORACLE 不同的是,PostgreSQL的臨時表本身更徹底,在SESSION失效后,表的定義都會消失,ORACLE 則不是,表的定義不會消失。這也是兩種數據庫在臨時表上的區別。
我們可以下載做一個測試,我們開兩個窗口
在此之外,我們在開一個窗口
首先證明了每個session 中的臨時表都是獨立的,在別的SESSION 中是看不到的。
另外PostgreSQL 中的臨時表還有一些相關方便的設置,在創建時指定臨時表的在什么時候消失或者清理數據。
相關postgresql 可以在 commit 中進行設置例如
ON COMMIT DELETE ROWS;
ON COMMIT DROP;
ON COMMIT PRESERVE ROWS;
這三種分別代表不同的含義,一個是在SESSION內,如果COMMIT 就直接將臨時表中的行刪除 , DROP 是直接commit 后就將表刪除,最后是即使commit 也保留表,直到session結束。
另外POSTGRESQL 中的并行掃描,對臨時表是無效的。還有一個有意思的事情時,如果你在同一個事務中創建了同名的臨時表 和 實體表,則你訪問的和操作的都是臨時表優先。
另外有一個地方需要討論的是,臨時表在復雜事務中到底幫了我們多少,
臨時表可以降低多表進行關聯造成的查詢復雜性和性能的問題
例如:臨時表可以在程序快速調用存儲過程中,分解對大表的訪問和查詢,將中間的結果存儲在臨時表中,而不是多個大表進行關聯,如果我們僅僅需要查詢大表中1%的記錄,同時可以通過條件來現將大表1%的數據或更少的數據存儲在臨時表里面,在進行相關的連接,聚合,等操作,會大大減少例如鎖等待,死鎖,等可能性。
另外和有些數據庫不同,PG的臨時表會創建在你當前操作的數據庫中,并且以t 開頭進行命名(這里指的是在臨時表的物理存儲空間的名字)
所以更好的利用歷史表,能讓你的例如存儲過程,乃至是程序設計都能提升一個層次,當然如果濫用歷史表,在不恰當的場景進行使用,則會事倍功半的結果。
看完了這篇文章,相信你對“PostgreSQL如何實現臨時表”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。