PostgreSQL如何创建临时表?

PostgreSQL支持会话级和事务级临时表,两者在会话结束后消失。会话级临时表存在于特殊Schema下,不同session中同名表互不影响。ONCOMMIT子句控制事务结束时的数据处理。创建临时表时,TEMPORARY可缩写为TEMP,但PostgreSQL不支持GLOBAL和LOCAL关键字。
摘要由CSDN通过智能技术生成

分类

PostgreSQL支持两种临时表:

  • 会话级临时表:数据可以一直保存在整个会话的生命周期中
  • 事务级临时表:数据只存在于这个事务的生命周期中

在PostgreSQL中,不管是事务级的临时表还是会话级的临时表,当会话结束时都会消失,这与Oracle数据库不同,在Oracle数据库中,只是临时表中的数据消失,而临时表还存在。

如果在两个不同的session中创建一个同名的临时表,实际上创建的是两张不同的表。

默认情况下创建的临时表是会话级的

会话级临时表

image
创建一张临时表,通过查看发现,临时表是生成的一个特殊的Schema下的表,这个Schema名为“pg_temp_xx”其中xx代表一个数字,但是不同的session是不同的

另打开一个psql(session),查看当前的表:
image

从上面的结果可以看到,在另一个session中直接用“\d”命令是看不到这张表的,加上Schema后可以查看到,但是不能访问

事务级临时表

image

从上面的示例中可以看出,事务一旦结束,这种临时表中的数据就会消失。

实际上“ON COMMIT”子句有以下3种形式:

  • ON COMMIT PRESERVE ROWS:若不带“ON COMMIT”子句,默认情况下,数据会一直存在于整个会话周期中
  • ON COMMIT DELETE ROWS:数据只存在于事务周期中,事务提交后数据就消失了
  • ON COMMIT DROP:数据值存在于事务周期中,事务提交后临时表就消失了。这种情况下,创建临时表的语句与插入数据的语句需要放到一个事务中,若把创建临时表的语句放在一个单独的事务中,事务一旦结束,这张临时表就会消失

创建临时表时,关键字“TEMPORARY”也可以缩写成“TEMP”

create TEMPORARY table tmp_t1(id int primary key,note text);
create TEMP table tmp_t1(id int primary key,note text);

以上两条SQL语句是等价的

PG为了能够与其他数据库的临时表语句兼容,还没有“GLOBAL”和“LOCAL”两个关键字,加与不加都是一样的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值