首页 > 数据库 >postgresql临时表

postgresql临时表

时间:2023-09-27 21:25:10浏览次数:38  
标签:事务 postgresql temp 临时 ## test table

PostgreSQL中的临时表分两种,一种是会话级临时表,一种是事务级临时表。

在会话级临时表中,数据可以存在于整个会话的生命周期中,

在事务级临时表中,数据只能存在于事务的生命周期中。

不管是会话级还是事务级的临时表,当会话结束后,临时表会消失,这和Oracle数据库不同。Oracle数据库当会话结束后,数据消失,而表依然存在。

方法一:创建临时表,再批量导入数据

---创建临时表
CREATE TEMPORARY TABLE temp_table (
  id int,
    name varchar(50),
    age int,
)ON COMMIT PRESERVE ROWS;
---验证临时表(无数据)
SELECT * FROM temp_table;
---批量导入数据
INSERT INTO temp_table(
 id,
 name,
 age
)
SELECT
    id,
    name,
    age
FROM target_table;

这种方法不实用,因为临时表每个字段都需要自己定义,比较费时费力。

方法二:直接从结果集创建临时表

---根据查询的结果集生成临时表不需要每个字段都定义
CREATE TEMPORARY TABLE temp_table AS (SELECT * FROM target_table);
---验证临时表
SELECT * FROM temp_table;

关键字TEMPORARY可以直接用简写temp,这种方法更简洁,更实用

1、会话级临时表,其实上面方法二用的就是会话级临时表

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)ON COMMIT PRESERVE ROWS 表示临时表的数据在事务结束后保留;
(2)ON COMMIT DELETE ROWS      表示临时表的数据在事务结束后truncate掉;
(3)ON COMMIT DROP                    表示临时表在事务结束后删除。

使用示例:(通常用来保存临时数据,用于加快数据查询速度)

drop table if  exists  hour_temp;
create temptable hour_temp AS (SELECT * FROM hour where datatime>now() + '- 6 hour');
临时表调用的sql

 

标签:事务,postgresql,temp,临时,##,test,table
From: https://www.cnblogs.com/tiandi/p/17734354.html

相关文章

  • PostgreSQL数据库WAL日志空间大小以及不清理的原因深入分析
    1.背景很多初学者会对WAL日志占用多少空间比较疑惑,听网上的一些文章说是由max_wal_size来控制的,但发现很多时候WAL日志空间会超过这个设置的值,不知道为什么?同时有时会发现WAL日志不清理了,占用空间在不停的增长,然后不知道为什么?看一些网上的文章,发现情况不是网上说的那种情况。......
  • 数据库临时表的使用
    一、什么是临时表临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别。它只能存储在临时表空间,而非用户的表空间。临时表是会话或事务级别的,只对当前会话或事务可见。每个会话只能查看和修改自己的数据。临时表的分类:事......
  • Linux CentOS 7.x离线安装PostgreSQL操作手册
    一、准备环节rpm-qa|greppostgres检查PostgreSQL是否已经安装rpm-qal|greppostgres检查PostgreSQL安装位置postgresql-12.2.tar.gz二、Pgsql数据库安装下载下载地址:http://www.postgresql.org/ftp/source/选择你你需要的版本,本次安装12.2的版......
  • PostgreSQL Serial
    概念描述PostgreSQL中的SERIAL是一种特殊的类型,用于创建自增长的整数列,通常用作表的主键或其他需要唯一标识的列。SERIAL实际上不是真正的类型,而是一种便捷的写法,它会自动创建一个SEQUENCE对象,并将该SEQUENCE的下一个值作为该列的默认值。PostgreSQLSERIAL是一种特殊的用于生产整......
  • PostgreSQL教程:备份与恢复(物理备份、物理恢复)
    物理备份(归档+物理)这里需要基于前面的文件系统的备份和归档备份实现最终的操作单独使用文件系统的方式,不推荐毕竟数据会丢失。这里直接上PostgreSQL提供的pg_basebackup命令来实现。pg_basebackup会做两个事情、会将内存中的脏数据落到磁盘中,然后将数据全部备份会将wal日志直接做归......
  • PostgreSQL教程:事务的ACID特性及基本使用
    什么是ACID?在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性,有ACID这一说:原子性A:事务是一个最小的执行单位,一次事务中的操作要么都成功,要么都失败。一致性C:在事务完成时,所有数据必须保持在一致的状态。(事......
  • PostgreSQL教程:触发器
    触发器Trigger,是由事件触发的一种存储过程当对标进行insert,update,delete,truncate操作时,会触发表的Trigger(看触发器的创建时指定的事件)构建两张表,学生信息表,学生分数表。在删除学生信息的同时,自动删除学生的分数。先构建表信息,填充数据createtablestudent(idint,namev......
  • PostgreSQL教程:约束(主键、非空、唯一、检查约束)
    核心在于构建表时,要指定上一些约束。约束主键--主键约束droptabletest;createtabletest(idbigserialprimarykey,namevarchar(32));非空--非空约束droptabletest;createtabletest(idbigserialprimarykey,namevarchar(32)notnull);......
  • PostgreSQL教程:数组类型
    数组还是要依赖其他类型,比如在设置住址,住址可能有多个住址,可以采用数组类型去修饰字符串。PGSQL中,指定数组的方式就是[],可以指定一维数组,也支持二维甚至更多维数组。构建数组的方式:droptabletest;createtabletest(idserial,col1int[],col2int[2],col3......
  • PostgreSQL教程:JSON&JSONB类型
    JSON在MySQL8.x中也做了支持,但是MySQL支持的不好,因为JSON类型做查询时,基本无法给JSON字段做索引。PGSQL支持JSON类型以及JSONB类型。JSON和JSONB的使用基本没区别。撇去JSON类型,本质上JSON格式就是一个字符串,比如MySQL5.7不支持JSON的情况的下,使用text也可以,但是字符串类型无法校验......