Postgresql的臨時表的用法
臨時表解釋:
PostgreSQL中的臨時表分兩種,一種是會話級臨時表,一種是事務級臨時表。在會話級臨時表中,數據可以存在於整個會話的生命周期中,在事務級臨時表中的數據只能存在於事務的生命周期中。
- 不管是會話級還是事務級的臨時表,當會話結束后,臨時表會消失,這和Oracle數據庫不同。Oracle數據庫當會話結束后,數據消失,而表依然存在。
- “ON COMMIT” 子句有三種形式,默認使用的是PRESERVE ROWS:
(1)ON COMMIT PRESERVE ROWS 表示臨時表的數據在事務結束后保留;
(2)ON COMMIT DELETE ROWS 表示臨時表的數據在事務結束后truncate掉;
(3)ON COMMIT DROP 表示臨時表在事務結束后刪除。
臨時表與永久表相似,數據是存儲到數據庫里,相當於第二次直接關聯的是一個小表,查詢效率大大提高,表和數據可以根據需求是否保留。
法一創建臨時表,再批量導入數據
---創建臨時表
CREATE TEMPORARY TABLE temp_table (
id int,
name varchar(50),
age int,
)ON COMMIT PRESERVE ROWS;
---驗證臨時表(無數據)
SELECT * FROM temp_table;
---批量導入數據
INSERT INTO temp_table(
id,
name,
age
)
SELECT
id,
name,
age
FROM target_table;
一般不使用法一,臨時表每個字段都需要自己定義,畢竟有些數據結果集需要先存儲起來再處理,也不能定義的字段都考慮到。
法二直接從結果集創建臨時表
---根據查詢的結果集生成臨時表不需要每個字段都定義
CREATE TEMPORARY TABLE temp_table AS (SELECT * FROM target_table);
---驗證臨時表
SELECT * FROM temp_table;
---刪除臨時表
DROP TABLE temp_table;
---本次使用完臨時表后臨時表和數據都保留
CREATE TEMPORARY TABLE temp_table ON COMMIT PRESERVE ROWS AS (SELECT * FROM target_table);
---本次使用完臨時表后臨時表保留數據清空
CREATE TEMPORARY TABLE temp_table ON COMMIT DELETE ROWS AS (SELECT * FROM target_table);
---本次使用完臨時表后自動刪除
CREATE TEMPORARY TABLE temp_table ON COMMIT DROP AS (SELECT * FROM target_table);