【PostgreSQL-9.6.3】臨時表


PostgreSQL中的臨時表分兩種,一種是會話級臨時表,一種是事務級臨時表。在會話級臨時表中,數據可以存在於整個會話的生命周期中,在事務級臨時表中的數據只能存在於事務的生命周期中。
1. 會話級臨時表

##創建會話級臨時表,PG中默認創建的就是會話級的。
test=# create TEMPORARY table tmp1 (id int primary key,note text);
CREATE TABLE

##查看表屬性,schema為“pg_temp_x”,其中“x”代表一個數字,不同的session這個數字不同。
test=# \d
          List of relations
  Schema | Name | Type | Owner 
-----------+------+-------+----------
 pg_temp_3 | tmp1 | table | postgres
(1 row)

##退出會話
test=# \q

##重新登錄會話
[postgres@drz 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM