Postgresql临时表

https://www.cnblogs.com/baisha/p/8074716.html

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

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

示例:

创建临时表temp

使用其他会话查看临时表,可以看到查询不到临时表temp

使用“pg_temp_5.temp”可以查询到temp的信息

关闭创建临时表的会话,使用另一个会话再次查看,表已经被删除。

创建临时表,当前会话可以正常访问临时表中数据

使用另一个会话查询该临时表中的数据,不能查询数据

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

使用另一会话创建同名临时表 ,示例如下:

创建事务级临时表,示例如下

总结

PostgreSQL临时表是schema下所生成的一个特殊的表,这个schema的名称为“pg_temp_n”,其中n代表数字,不同的session数字不同。

一个会话创建的临时表不能被其他会话访问。

默认情况下,创建的临时表是会话级的,如果需要创建事务。需要添加“on commit delete rows”子句。(注:“on commit”子句形式有三种:“on commit preserve rows”,默认值,会话级;“on commit delete rows”,事务级,事务结束,删除数据;“on commit drop”,事务级,事务结束,删除临时表)

创建临时表的关键字“temporary”可以缩写为“temp”。

PostgreSQL为了与其他数据库创建临时表的语句保持兼容,还没有“GLOBAL”和“LOCAL”关键字,但两个关键字没有用处。

原文地址:https://www.cnblogs.com/alexzhang92/p/13049951.html