1. 程式人生 > 其它 >Postgresql臨時表(TEMPORARY TABLE)

Postgresql臨時表(TEMPORARY TABLE)

一、簡介

PostgreSQL中的臨時表分兩種,一種是會話級臨時表,一種是事務級臨時表。在會話級臨時表中,資料可以存在於整個會話的生命週期中,在事務級臨時表中的資料只能存在於事務的生命週期中。預設建立的是會話級別的臨時表。

1、不管是會話級還是事務級的臨時表,當會話結束後,臨時表會消失,這和Oracle資料庫不同。Oracle資料庫當會話結束後,資料消失,而表依然存在。

2、“ON COMMIT” 子句有三種形式,預設使用的是PRESERVE ROWS,即會話臨時表:

(1)ON COMMIT PRESERVE ROWS 表示臨時表的資料在事務結束後保留,預設值,表示會話級臨時表;

(2)ON COMMIT DELETE ROWS 表示臨時表的資料在事務結束後truncate掉,表示事務級臨時表,事務結束,刪除資料;

(3)ON COMMIT DROP 表示臨時表在事務結束後刪除,表示事務級臨時表,事務結束,刪除臨時表。

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

4、使用pg_basebackup備份時,不會備份TEMPORARY table和 UNLOGGED table。

二、知識點

PostgreSQL臨時表是schema下所生成的一個特殊的表,這個schema的名稱為“pg_temp_n”,其中n代表數字,不同的session數字不同。

一個會話建立的臨時表不能被其他會話訪問。

建立臨時表的關鍵字“temporary”可以縮寫為“temp”。

PostgreSQL為了與其他資料庫建立臨時表的語句保持相容,還沒有“GLOBAL”和“LOCAL”關鍵字,但兩個關鍵字沒有用處。

三、示例

略。。。。。。。。