Postgresql中暫存資料表(temporary table)的特性和用法

來源:互聯網
上載者:User

標籤:text   sso   語句   tab   插入資料   jsb   .net   完成   退出   

熟悉Oracle的人,相比對暫存資料表(temporary table)並不陌生,很多情境對解決問題起到不錯的作用,開源庫Postgresql中,也有暫存資料表的概念,雖然和Oracle中暫存資料表名字相同,使用方法和特性也有類似的地方,但還是有很多不同的方面,下面就對比Oracle中暫存資料表舉例說明下。

1、Postgresql 暫存資料表的會話隔離性

Oracle中的暫存資料表,建立後,雖然各個會話間的資料是互相隔離的,也就是一個會話看不到其他會話的資料,但定義是共用的。而Postgresql中的暫存資料表,建立後,不但不同會話間的資料是相互隔離的,就連暫存資料表的定義也是不同會話間相互隔離的,也就是一個會話建立的暫存資料表,不能被其他會話看到,如所示:

session1:建立了暫存資料表t_tmp。

session2:以另一個會話登入相同使用者名稱和資料庫,查看session1中建立的暫存資料表,既不能查詢表,也不能查看錶結構,但可以通過系統檢視表看到該暫存資料表的存在。

2、Posgresql暫存資料表的易揮發性

Oracle中的暫存資料表,一個會話的資料在會話退出時會自動消失,但暫存資料表的定義一旦建立,就會已會一直存在,知道使用者刪除。而Postgresql的暫存資料表不是這樣,雖然會話退出會話資料也會自動消失,但定義也會隨著會話的退出而消失,也就是說,Postgresql中的暫存資料表的生命週期最長就是會話生命週期,甚至更短,:

是前面session1退出會話後,再次登入查詢之前建立的暫存資料表t_tmp,已經查不到了,哪怕是暫存資料表定義也沒了。

此外,在建立Postgresql暫存資料表時,還可以設定相關選項,使得暫存資料表在事務結束時消失,哪怕會話沒結束,也會消失,:

中,雖然建立暫存資料表成功了,但回頭查看時卻怎麼也看不到表定義,雖然接連建立了兩邊,還是看不到表定義,也不能查,原因就是定義暫存資料表是用了on commit drop選項,這意味著事務結束時,自動刪除暫存資料表,本人用的psql用戶端工具中,每當完成一個ddl或dml時,會預設認為事務結束,所以,建立暫存資料表的ddl語句被認為一個事務,雖然建立語句成功了,表也建立了,但隨後,事務結束後被很快又刪除了,所以,無論如何也看不到暫存資料表的定義。但如果顯式聲明一個事務的開始和結束,即使使用了on commit drop選項,建立暫存資料表後,也是可以看到定義的,插入資料後,也一樣可以看到資料,如所示:

然後,使用on commit drop選項建立的暫存資料表,一旦建立它的事務結束,暫存資料表和其中的資料也就消失了,如所示:

3、Postgresql暫存資料表資料的易揮發性

Oracle中暫存資料表的資料,會隨著會話事務或會話的結束而自動消失,主要看建立暫存資料表時的相關選項。Postgresql暫存資料表中的資料,也有類似的功能,除了通過on commit drop選項可以設定事務結束暫存資料表就消失外,還可以通過on commit相關選項,分別控制暫存資料表的資料在事務結束消失(僅僅資料消失,定義還存在)和會話結束消失(資料和表定義都消失),如下通過on commit delete rows定義了暫存資料表:

可以看到,雖然成功建立了暫存資料表,也往其中成功插入了資料,可是再查詢資料時,雖然表定義還在,但資料沒了,這是因為定義時用了on commit delete rows選項,就是事務結束,資料就消失,這裡的insert into語句預設為一個事務,執行完事務就算結束,所以,插入的資料立刻又消失了,如,顯式的定義了事務的開始和結束,事務期間,插入的資料可以查到:

但一旦事務結束,這些剛剛插入暫存資料表的資料又立刻不見了,如:

此外,還可以用on commit preserve rows選項來定義暫存資料表,通過該選項定義的暫存資料表,事務結束時,資料依然還會存在,直到會話結束為止,如所示:

可見,單個語句的insert事務結束後,依然可以查到資料的存在,這也是暫存資料表定義不設定on commit選項時的預設行為。

 

Postgresql中暫存資料表(temporary table)的特性和用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.