標籤:刪除 primary test 會話 reserve from int help 總結
PostgreSQL中的暫存資料表分兩種,一種是會話級暫存資料表,一種是事務級暫存資料表。在會話級暫存資料表中,資料可以存在於整個會話的生命週期中,在事務級暫存資料表中的資料只能存在於事務的生命週期中。
1. 會話級暫存資料表
##建立會話級暫存資料表,PG中預設建立的就是會話級的。test=# create TEMPORARY table tmp1 (id int primary key,note text);CREATE TABLE##查看錶屬性,schema為“pg_temp_x”,其中“x”代表一個數字,不同的sessionzhegetest=# \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=# \dNo 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 1test=# 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】暫存資料表