PostgreSQL 临时表
CREATE TEMP TABLE
- 这种方式创建的临时表默认是session级别的,session关闭会自动删除。(也可以创建为事务级别的,事务结束自动删除)。
-
CREATE TEMP TABLE temp_table_name( column_list );
- postgresql 官方文档介绍:临时表存在于一个特殊的schema里,所以不支持创建的时候指定schema。临时表可以与当前schema里的表重名,但是会导致永久表无法访问。
- 性能:因为临时表是session级别的,不存在并发访问的情况,自然也不存在加锁等操作,写入性能更好。也可以创建索引优化查询。
-
-- on commit 参数指定事务提交的时候此临时表的处理逻辑:PRESERVE ROWS 保留数据,默认值 | DELETE ROWS 删除数据 | DROP 删除表 CREATE TEMP TABLE temp_table_name( column_list ) ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP }
with
with
子句不会在数据库中保留数据,也不会占用额外的存储空间。创建临时表方便灵活,可以基于查询结果,可以基于几行数据。-
-- 基于查询结果创建 WITH temp_table_name AS ( SELECT column1, column2, ... FROM existing_table WHERE conditions ) SELECT * FROM temp_table_name;
-
-- 基于死数据创建临时表 WITH status_order(status, seq) AS ( VALUES ( 'IN_PROGRESS', 1 ), ( 'NOT_STARTED', 2 ), ( 'FINISHED', 3 ) ) SELECT * FROM status_order;