KingbaseES临时表

2024-05-28 09:12
文章标签 临时 kingbasees

本文主要是介绍KingbaseES临时表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

    临时表是在数据库中临时存储数据的一种特殊表格,通常为需要临时存储数据时提供一个临时性的存储空间,用于存储中间结果或者临时计算数据。

    临时表在会话结束或不再需要时会自动销毁,不会永久保存数据,因此适合用于临时性需求,例如:复杂查询、数据处理或者临时存储过程中。

        

文章目录如下

1. 临时表的用法

1.1. 本地临时表

1.2. 全局临时表

2. 临时分区表的用法

2.1. 本地临时分区表

2.2. 全局临时分区表


        

1. 临时表的用法

1.1. 本地临时表

  • 本地临时表就是简介中提到的,用于临时存储数据,会话结束后自动销毁,并且在会话1创建的临时表并不会作用到会话2。

创建本地临时表只需要在创建普通表的基础上增加特定的语法(TEMP)即可:

CREATE TEMP TABLE tmp_1(id int);

创建的临时表并不是保存在默认模式public中,而是在pg_temp_4。并且这种临时表只在当前会话有效,比如退出连接后临时表自动清理

        

临时表虽然会随着会话的退出而销毁,但在会话中是可以插入数据的:

        

1.2. 全局临时表

全局临时表不同于本地临时表,全局临时表的表定义是永久的,数据可以是临时或永久的。

--表永久,不保存数据
CREATE GLOBAL TEMP TABLE tmp_1(id int
);--表永久,保存数据
CREATE GLOBAL TEMP TABLE tmp_1(id int
) ON COMMIT PRESERVE ROWS;

这里给了2种创建临时表的方法,不论哪种表都是永久的

创建的全局临时表的模式会自动保存到public,因为它不是临时的。

        

分别来看一下这两种方式的形式:

【第1种方式】不保存数据

可以插入数据,但插入的数据不会保存。

        

【第2种方式】可以保存数据

这种方式的表定义和数据都是持久存储的,存储的方式与普通表就没有了区别,但是在应用层面上会多出各种限制,因此这种方式也只适用于一些特殊场景。 

        

2. 临时分区表的用法

2.1. 本地临时分区表

临时表和临时分区表的用法和逻辑实际上都是一样的,比如创建一个本地的临时分区表

CREATE TEMP TABLE tmp_par1(id int
) PARTITION BY RANGE(id);

临时分区表的模式同样放在pg_temp_4中,表会随着连接的退出而销毁,会话2也无法访问会话1的临时表。当然,本地临时分区表也是可以插入数据的。

        

2.2. 全局临时分区表

全局临时分区表也和全局临时表一样,可以使表永久数据不存储、表永久数据存储,这里就不举例子了。需要注意的是,当创建了全局临时分区表时,我们向其插入数据时,单个连接最多只能访问32个全局临时表。举个例子:

创建一张可存储数据的全局临时分区表

CREATE GLOBAL TEMP TABLE tem_par1(id int
)
PARTITION BY RANGE(id)
ON COMMIT PRESERVE ROWS;

创建50个全局临时表子分区

\set SQLTERM /
DECLAREn int;name text;sql text;
BEGINFOR i IN 1..50 LOOPn := i + 1;name := 'tem_par1_p' || i;sql := 'CREATE GLOBAL TEMP TABLE ' || name || ' PARTITION OF tem_par1 FOR VALUES FROM (' || i || ') TO (' || n || ') ON COMMIT PRESERVE ROWS;';EXECUTE sql;END LOOP;
END;
/
  • 注意:全局临时分区表的子分区也必须是全局临时表,子分区需要存储数据也必须加上 ON COMMIT PRESERVE ROWS

分区1存储整数1的数据,分区2存储整数2的数据,依此类推...

        

分区表创建完成后,在当前会话中一次性向33个分区插入数据

INSERT INTO tem_par1 VALUES (GENERATE_SERIES(1, 33));

截图可以看到,使用 GENERATE_SERIES 函数向全局临时分区表插入1~33的数据。由于1~33是分别存储在33个不同子分区中,也就代表同时访问了33个全局临时表,而Kingbase限制了单个连接允许访问全局临时表最多不超过32个,所以后面插入1~32是能够成功的。

这种限制目前没有参数可以修改,所以在插入数据时出现了该报错,则需要根据分区分段插入数据。

这篇关于KingbaseES临时表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010138

相关文章

不设临时变量交换a,b的值

常规的做法: int tmp = a; a = b; b = tmp; 不设中间变量的方法: a = a + b; b = a - b; a = a - b;

J2SE - 在BAT中指定临时使用的JDK环境

# BAT开头指定临时的JDKset JAVA_HOME=C:/Develop/Jdk-1.6.0set PATH=%JAVA_HOME%/bin;%JAVA_HOME%/jre/binset CLASSPATH=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;ar;lib/run.jar# 执行Main方法java com.xl.Main

Oracle中的临时表Temporary Table

Oracle中的临时表(Temporary Table)是一种特殊类型的表,用于存储临时数据,这些数据在会话结束或事务提交后会自动删除。Oracle数据库提供了两种主要的临时表类型:事务级全局临时表和会话级全局临时表。 全局临时表(Global Temporary Table) 全局临时表是Oracle数据库中常用的临时表类型,它具有以下特点: 临时性:全局临时表中的数据在会话结束或事务提交

git进阶·团队开发的时候为何要创建临时分支来修复bug

若在团队开发中,突然遇到一个功能性bug,你会怎么使用git来管理分支呢? 在近些年来,团队工作的经验中,我总结出来的是,最好是先创建一个临时分支来修复bug,修复好后,再合并到主分支或目标分支。这样子在多个bug,或者多个功能一起进行开发的时候,可以分别修复,不会影响到主分支、目标分支以及其他临时修复bug分支上的代码。因为这样子不容易导致团队成员之间的代码合并丢失的情况,如果直接在远程分支上修

mysql 临时表和内存表创建 查询 删除以及注意事项

mysql 临时表和内存表创建 查询 删除以及注意事项临时表和内存表的ENGINE 不同,临时表默认的是MyISAM,而内存表是MEMORY ,临时表只对当前会话可见,连接断开时,自动删除! mysql教程 临时表和内存表创建 查询 删除以及注意事项 临时表和内存表的engine 不同,临时表默认的是myisam,而内存表是memory ,临时表只对当前会话可见,连接断开时,自动删除!

k8s中emptyDir{}临时卷的作用原理

用途:在k8s中,一个pod内有一个主容器,这个主容器里面的进程是跑一个服务的,这个服务有一个操作,就是把一些数据(比如日志信息),写到主容器内的一个文件里面。这个文件里面的内容,需要另一个容器跑一个进程,把它提取出来。 提取出来干嘛,就是看主容器内具体服务进程的运行情况。 那么再通过prometheus等监控工具,是否可以实时监控这个主容器服务的运行情况呢,应该是可以的。 所以为了实现这个

MySQL密码策略更改(临时+永久)

目录 1、查看数据库当前密码策略 2、查看密码插件: 3、官方文档策略定义 4、更改密码策略 临时修改 (1)更改密码策略为LOW,改为LOW或0 (2)更改密码长度 (3)设置大小写、数字和特殊字符均不要求。 (4)查看 永久修改 (1)修改MySQL配置文件 (2)重启 1、查看数据库当前密码策略 show VARIABLES like "%password

临时表的魔力:SQL中的快速缓存与数据处理

临时表的魔力:SQL中的快速缓存与数据处理 在数据库的世界中,临时表是一种特殊的表,它在会话期间或事务中存在,用于存储临时数据。临时表对于执行复杂的查询、数据转换和分析等任务至关重要。本文将深入探讨SQL中的临时表,包括它们的定义、使用场景以及如何高效地使用它们。 一、临时表简介 什么是临时表? 临时表是数据库中的一个表,它仅在当前会话或当前事务中可见,当会话结束或事务提交时,临时表及其数据

【c++】 如何写一个调式工具类来临时查看变量值

介绍: 这个函数中设计了一个类Debugger,这个类提供了一个方法show,可以将一个变量打印在控制台,只要输入变量名就可以了,并且它可以自动匹配数据类型,通过重载匹配不同的参数。 完整代码: #include <iostream>#include <string> // 包含对std::string的支持class Debugger {private:int num;bool f

C++非const的引用不能指向临时对象

C++标准的规定:非常量的引用不能指向临时对象 例如: const string &temp = "c++"; 是正确的。 但是string &temp = “c++”; 是错误的,因为该语句首先调用string的构造函数,生成一个临时对象,但是将该临时对象复制给一个非const的引用temp就是错误的。 -----------------------------------