【PostgreSQL】臨時表
阿新 • • 發佈:2017-08-15
cnblogs drop select end 登錄 不同 postgre 臨時表 found
PostgreSQL中的臨時表分兩種,一種是會話級臨時表,一種是事務級臨時表。在會話級臨時表中,數據可以存在於整個會話的生命周期中,在事務級臨時表中的數據只能存在於事務的生命周期中。
1. 會話級臨時表
##創建會話級臨時表,PG中默認創建的就是會話級的。 test=# create TEMPORARY table tmp1 (id int primary key,note text); CREATE TABLE ##查看表屬性,schema為“pg_temp_x”,其中“x”代表一個數字,不同的sessionzhege test=# \d List of relations Schema | Name | Type | Owner -----------+------+-------+---------- pg_temp_3 | tmp1 | table | postgres (1 row) ##退出會話 test=# \q ##重新登錄會話 [[email protected] bin]$ psql test; psql (8.4.18, server 9.6.3) WARNING: psql version 8.4, server version 9.6. Some psql features might not work. Type "help" for help. ##再次查看,臨時表已經消失 test=# \d No relations found.
2. 事務級臨時表
在創建事務級臨時表語句中需要加上"on commit delete rows"子句。
##創建事務級臨時表 test=# create TEMPORARY table tmp2 (id int primary key,note text) on commit delete rows; CREATE TABLE ##開始一個事務 test=# begin; BEGIN ##插入測試數據 test=# insert into tmp2 values (1,‘Tom‘); INSERT 0 1 test=# insert into tmp2 values (2,‘Peter‘); INSERT 0 1 ##查看表中數據 test=# select * from tmp2; id | note ----+------- 1 | Tom 2 | Peter (2 rows) ##結束事務 test=# end; COMMIT ##再次查看,表中數據已經消失,因為事務級臨時表中數據只存在於事務的生命周期中 test=# select * from tmp2; id | note ----+------ (0 rows)
總結:
1. 不管是會話級還是事務級的臨時表,當會話結束後,臨時表會消失,這和Oracle數據庫不同。Oracle數據庫當會話結束後,數據消失,而表依然存在。
2. "ON COMMIT" 子句有三種形式,默認使用的是PRESERVE ROWS:
(1)ON COMMIT PRESERVE ROWS 表示臨時表的數據在事務結束後保留;
(2)ON COMMIT DELETE ROWS 表示臨時表的數據在事務結束後truncate掉;
(3)ON COMMIT DROP 表示臨時表在事務結束後刪除。
The End!
2017-08-15
【PostgreSQL】臨時表