PostgreSQL如何创建临时表?

分类

PostgreSQL支持两种临时表:

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

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

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

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

会话级临时表

PostgreSQL如何创建临时表?_第1张图片
创建一张临时表,通过查看发现,临时表是生成的一个特殊的Schema下的表,这个Schema名为“pg_temp_xx”其中xx代表一个数字,但是不同的session是不同的

另打开一个psql(session),查看当前的表:
PostgreSQL如何创建临时表?_第2张图片

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

事务级临时表

PostgreSQL如何创建临时表?_第3张图片

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

实际上“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”两个关键字,加与不加都是一样的效果。

你可能感兴趣的:(PostgreSQL,postgresql,数据库,oracle)