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

【PostgreSQL-9.6.3】临时表的更多相关文章

  1. Postgresql临时表

    PostgreSQL支持两类临时表,会话级和事务级临时表.在会话级别的临时表中,在整个会话的生命周期中,数据一直保存.事务级临时表,数据只存在于这个事务的生命周期中.不指定临时表的属性, Postgr ...

  2. postgresql逻辑结构--表(二)

    一.创建表 语法: create table table_name( col01_name data_type, col02_name data_type, col03_name data_type, ...

  3. Postgresql中临时表(temporary table)的特性和用法

    熟悉Oracle的人,相比对临时表(temporary table)并不陌生,很多场景对解决问题起到不错的作用,开源库Postgresql中,也有临时表的概念,虽然和Oracle中临时表名字相同,使用 ...

  4. 数据处理之PostgreSQL过程语言学习

    前段时间,公司更换新的PostgreSQL数据集市的系统过程中,自己下载了postgresqlAPI的pdf文件研究了一下PostgreSQL数据集市.发现使用PostgreSQL过程语言可以大大加快 ...

  5. 【转】 MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?

    转载地址:http://www.infoq.com/cn/news/2013/12/mysql-vs-postgresql 如果打算为项目选择一款免费.开源的数据库,那么你可能会在MySQL与Post ...

  6. PostgreSQL 中日期类型转换与变量使用及相关问题

    PostgreSQL中日期类型与字符串类型的转换方法 示例如下: postgres=# select current_date; date ------------ 2015-08-31 (1 row ...

  7. PostgreSQL应用相关问题解决

    PostgreSQL中是否区分聚簇索引与非聚簇索引的问题? 答:PostgreSQL中区分聚簇索引与非聚簇索引. 示例如下: 创建聚族索引: CREATE INDEX test_ind ON yy ( ...

  8. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  9. 聚集索引、非聚集索引、聚集索引组织表、堆组织表、Mysql/PostgreSQL对比、联合主键/自增长、InnoDB/MyISAM(引擎方面另开一篇)

    参考了多篇文章,分别记录,如下. 下面是第一篇的总结 http://www.jb51.net/article/76007.htm: 在MySQL中,InnoDB引擎表是(聚集)索引组织表(cluste ...

  10. postgresql大批量数据导入方法

    一直没有好好关注这个功能,昨天看了一下,数据库插入有瓶颈,今天研究了一下: 主要有以下方案: 1.使用copy从文件导入: copy table_001(a, b, "f", d, ...

随机推荐

  1. 阿里maven仓库配置

    修改conf文件夹下的settings.xml文件,添加如下镜像配置: <mirrors> <mirror> <id>alimaven</id> < ...

  2. Extended symmetrical multiprocessor architecture

    An architecture for an extended multiprocessor (XMP) computer system is provided. The XMP computer s ...

  3. 5-45 航空公司VIP客户查询 (25分) HASH

    不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分 ...

  4. 表单中的日期 字符串和Javabean中的日期类型的属性自动转换

    搞了一上午的bug最终还是因为自己springMVC的注解不熟悉的原因,特记录. 在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支 ...

  5. mysql limit具体用法

    MYSQL中LIMIT用法_百度知道 答 limit是mysql的语法select * from table limit m,n其中m是指记录开始的index,从0开始,表示第一条记录n是指从第m+1 ...

  6. 插件化开发—动态载入技术载入已安装和未安装的apk

    首先引入一个概念,动态载入技术是什么?为什么要引入动态载入?它有什么优点呢?首先要明确这几个问题.我们先从 应用程序入手,大家都知道在Android App中.一个应用程序dex文件的方法数最大不能超 ...

  7. CoreData使用方法三: NSPredicate在CoreData中的使用

    NSPredicate在CoreData中经常使用作查询使用,相当于sql语句中的where查询子句. 最经常使用的方法为: NSPredicate *ca = [NSPredicate predic ...

  8. C++学习之extern "C"

    我们知道,extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.这里起到的是声明作用范围的用处.另外,extern还可以与 ...

  9. vmware里面的linux怎么和windows相互传文件

    我们常常遇到这样的问题.高版本号的vmware遇到低版本号的linux.使用起来就比較抠脚,比方低版本号的linux安装在高版本号的vmware里. 1.不能全屏显示虚拟机 2.每次切换出来.总要按一 ...

  10. CloudEngine 6800基础配置-01_常见密码操作

    由于工作原因,现在从事公有云. 这简直就是个笑话,12年后又回来学网络知识. # 设置系统的日期.时间和时区   <HUAWEI> clock timezone BJ add 08:00: ...