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;
    
posted @ 2024-01-17 20:09  嘘,别吵  阅读(476)  评论(0编辑  收藏  举报