https://www.cnblogs.com/baisha/p/8074716.html
PostgreSQL支持兩類臨時表,會話級和事務級臨時表。在會話級別的臨時表中,在整個會話的生命周期中,數據一直保存。事務級臨時表,數據只存在於這個事務的生命周期中。不指定臨時表的屬性,
PostgreSQL中,不管是事務級還是會話級臨時表,當會話結束時,臨時表就會消失。這與oracle數據庫不同,在oracle數據庫中,只是臨時表中的數據消失,而臨時表還存在。
示例:
創建臨時表temp
使用其他會話查看臨時表,可以看到查詢不到臨時表temp
使用“pg_temp_5.temp”可以查詢到temp的信息
關閉創建臨時表的會話,使用另一個會話再次查看,表已經被刪除。
創建臨時表,當前會話可以正常訪問臨時表中數據
使用另一個會話查詢該臨時表中的數據,不能查詢數據
如果在兩個不同的session中創建一個同名的臨時表,實際上創建的是兩張不同的表。
使用另一會話創建同名臨時表 ,示例如下:
創建事務級臨時表,示例如下
總結
PostgreSQL臨時表是schema下所生成的一個特殊的表,這個schema的名稱為“pg_temp_n”,其中n代表數字,不同的session數字不同。
一個會話創建的臨時表不能被其他會話訪問。
默認情況下,創建的臨時表是會話級的,如果需要創建事務。需要添加“on commit delete rows”子句。(注:“on commit”子句形式有三種:“on commit preserve rows”,默認值,會話級;“on commit delete rows”,事務級,事務結束,刪除數據;“on commit drop”,事務級,事務結束,刪除臨時表)
創建臨時表的關鍵字“temporary”可以縮寫為“temp”。
PostgreSQL為了與其他數據庫創建臨時表的語句保持兼容,還沒有“GLOBAL”和“LOCAL”關鍵字,但兩個關鍵字沒有用處。