• 【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

  • 相关阅读:
    多级菜单 menu
    PHP 在线 编辑 解析
    [转]在PHP语言中使用JSON
    [转]SSIS ADO.NET vs OLEDB
    [转]SSIS高级转换任务—在Package中是用临时表是需要设置RetainSameConnection属性
    [转]SSIS高级转换任务—行计数
    [转]SSIS Recordset Destination
    [转]SSIS: By coding
    [转]SSIS cannot convert between unicode and non-unicode string
    [转]How to handle Failed Rows in a Data Flow
  • 原文地址:https://www.cnblogs.com/NextAction/p/7365861.html
Copyright © 2020-2023  润新知