GaussDB分区表自动新增分区

前言

GaussDB是华为自主研发的企业级分布式关系型数据库,支持集中式和分布式两种部署方式。为企业提供了高可用,高可靠,高安全等能力,其产品全栈自研,并且具有完善生态工具和开源社区。在实际去O的项目过程,经常会遇到分区表的迁移,本文为大家介绍GaussDB分区表设置自动新增分区。

分区表及其语法介绍

Oracle的分区表,应该是我们使用频率比较高的数据库对象,目前GaussDB已经支持了分区表的功能,但是存在分布式不支持分区表设置自动新增分区,对于用户的体验不是很友好。

分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点:

1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。

2、增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。

3、方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。

分区表目前支持常见的范围分区表、间隔分区表、列表分区表、哈希分区表等,其创建语法如下:

CREATE TABLE [ IF NOT EXISTS ] partition_table_name
( [
{ column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE source_table [ like_option [...] ] }[, ... ]
] )
[ AUTO_INCREMENT [ = ] value ]
[ WITH ( {storage_parameter = value} [, ... ] ) ]
[ COMPRESS | NOCOMPRESS ]
[ TABLESPACE tablespace_name ]
PARTITION BY {
{RANGE [COLUMNS] (partition_key) [ INTERVAL ('interval_expr') [ STORE IN (tablespace_name
[, ... ] ) ] ] [ PARTITIONS integer ] ( partition_less_than_item [, ... ] )} 
} [ { ENABLE | DISABLE } ROW MOVEMENT ];

如上述语法结构,集中式建设置分区表自动新增分区的功能为INTERVAL ('interval_expr') [ STORE IN (tablespace_name [, ... ] ) ], interval_expr表示自动创建分区的间隔,例如:1 day、1 month。另外对于指定了INTERVAL子句的语法格式,范围分区策略的分区键仅支持1列。

 

二、分区表自动新增验证

1、主备集群验证分区表自动新增分区

1) 创建测试用例的业务表。

CREATE TABLE css_ss_channelflow(
"id" VARCHAR(32)  NOT NULL,
"create_time" timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP,
"net_check_flag" INT4  NULL,
"ip_flag" VARCHAR(20)  NULL
) PARTITION BY RANGE("create_time") interval ('1 month')
(PARTITION IBIS_P_FLOW_04 VALUES LESS THAN (' 2017-04-01 00:00:00'),PARTITION SYS_P24777 VALUES LESS THAN (' 2024-01-01 00:00:00'))

2)插入数据验证分区是否自动递增。

 有当前分区时,插入成功。

insert into css_ss_channelflow values (1,now(),null,null);
insert into css_ss_channelflow values (2,now(),null,null);
insert into css_ss_channelflow values (3,'2023-12-14 15:34:21' :: timestamp,null,null);
select * from css_ss_channelflow;

当有新分区列的数据插入后,会自动分区,数据插入成功,也可以查询到。

insert into css_ss_channelflow values (4,'2024-01-02 11:52:01' :: timestamp,null,null);
insert into css_ss_channelflow values (5,'2024-03-02 11:52:01' :: timestamp,null,null);

3)查询表结构,发现没有分区信息。

select  pg_catalog.pg_get_tabledef('css_ss_channelflow') ;
SET search_path = wangcxyh;
CREATE TABLE css_ss_channelflow (id character varying(32) NOT NULL,create_time timestamp without time zone DEFAULT pg_systimestamp() NOT NULL,net_check_flag integer,ip_flag character varying(20)
)
WITH (orientation=row, compression=no)
PARTITION BY RANGE (create_time)
INTERVAL ('1 month')
( PARTITION ibis_p_flow_04 VALUES LESS THAN (' 2017-04-01 00:00:00') TABLESPACE pg_default,PARTITION sys_p24777 VALUES LESS THAN (' 2024-01-01 00:00:00') TABLESPACE pg_default
)
ENABLE ROW MOVEMENT;

4)通过核实系统字典表,该分区确认已经新增,该问题为已知问题。

select * from pg_catalog.pg_partition t where parentid  in (select relfilenode from pg_catalog.pg_class pc where pc.relname  ='css_ss_channelflow');
--查询分区信息,sys_p1、sys_p2为自增分区
relname           |parttype|parentid|rangenum|intervalnum|partstrategy|
------------------|--------|--------|--------|-----------|------------|
css_ss_channelflow|r       |38465545|       0|          0|i           |
ibis_p_flow_04    |p       |38465545|       0|          0|r           |
sys_p24777        |p       |38465545|       0|          0|r           |
sys_p1            |p       |38465545|       0|          0|i           |
sys_p2            |p       |38465545|       0|          0|i           |

2、分布式集群验证分区表自动新增分区

1)创建测试用例的业务表。

CREATE TABLE "wangcxyh"."css_ss_channelflow" (
"id" VARCHAR(32)  NOT NULL,
"create_time" timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP,
"net_check_flag" INT4  NULL,
"ip_flag" VARCHAR(20)  NULL
) PARTITION BY RANGE("create_time") interval ('1 month')
(PARTITION IBIS_P_FLOW_04 VALUES LESS THAN (' 2017-04-01 00:00:00'),PARTITION SYS_P24777 VALUES LESS THAN (' 2024-01-01 00:00:00'))
;

添加interval后,在分布式数据库下执行ddl语句。

SQL 错误 [5171] [42P16]: ERROR: Interval partitioned table is only supported in single-node mode.

确实目前分布式集群下仍然不支持分区设置自动新增分区的功能。

2)去掉interval关键字后,再次执行创建表。

CREATE TABLE "wangcxyh"."css_ss_channelflow" (
"id" VARCHAR(32)  NOT NULL,
"create_time" timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP,
"net_check_flag" INT4  NULL,
"ip_flag" VARCHAR(20)  NULL
) PARTITION BY RANGE("create_time") 
(PARTITION IBIS_P_FLOW_04 VALUES LESS THAN (' 2017-04-01 00:00:00'),PARTITION SYS_P24777 VALUES LESS THAN (' 2024-01-01 00:00:00'))
;

3)手动新增分区。

alter table css_ss_channelflow   ADD PARTITION csc_202403 VALUES LESS THAN (' 2024-04-01 00:00:00');
--该语句执行

4)插入数据。

--该语句执行成功
insert into css_ss_channelflow values (5,'2024-03-02 11:52:01' :: timestamp,null,null); 

5)对于不存在的分区进行插入数据,提示保存 inserted partition key does not map to any table partition。

insert into css_ss_channelflow values (6,'2024-07-02 11:52:01' :: timestamp,null,null);

三、总结

目前GaussDB对于集中式的分区表兼容还是比较好,但是对于分布式的分区表不支持设置自动新增分区,需要运维人员手动新增分区。由于近年来信创产业缘故,开始接触国产数据库并且从事过国产数据库的安装部署、数据迁移、运维开发,故障处理等。

在工作中使用GuassDB数据库,对于遇到一些案例做了总结及记录,希望能够把经验分享给更多的小伙伴,为国产信创版块贡献绵薄之力。

四、本文作者

本文内容来自于从事数据库运维的墨竹老师,拥有近10年的数据库开发和管理经验,擅长Oracle数据库开发及常规的运维、性能优化等。由于近年来信创产业缘故,开始接触国产数据库并且从事过国产数据库的安装部署、数据迁移、运维开发,故障处理等。目前工作中使用GuassDB数据库,对于遇到一些案例做了总结及记录,希望能够把经验分享给更多的小伙伴,为国产信创版块贡献绵薄之力。

欢迎小伙伴交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/754958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己录的视频怎么配上字幕?推荐几种方法

自己录的视频怎么配上字幕?在数字化时代,视频已经成为人们获取信息、娱乐消遣的重要形式。而对于许多内容创作者来说,为自己的视频添加字幕不仅能提升观众的观看体验,还能增加视频的专业度和吸引力。那么,如何为自己的…

MM1: Methods, Analysis Insights from Multimodal LLM Pre-training

MM1: Methods, Analysis & Insights from Multimodal LLM Pre-training 相关链接:arxiv 关键字:多模态学习、大型语言模型、预训练、视觉语言连接、混合专家模型 摘要 本文讨论了构建高性能的多模态大型语言模型(MLLMs)。特别…

【鸿蒙HarmonyOS开发笔记】动画过渡效果之布局更新动画

概述 动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指标就是帧率FPS&#x…

云原生(四)、Docker-Compose

Docker-Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个简单的 YAML 文件来配置应用程序的服务、网络和卷,从而使得在不同环境中轻松部署应用程序变得更加简单和可靠。 Docker Compose 主要由以下几个核心组件组成&#xf…

HTML静态网页成品作业(HTML+CSS)——世博园介绍(2个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…

BUUCTF-Ezsql1

1.打开靶机 打开第一个链接 2.万能密码 使用万能密码:a or 1 # 密码为随意 第二个用kali打开 3.ssh连接靶机 ssh ctf284490d0-7600-4c65-9160-5ced02f45633.node5.buuoj.cn -p 28191 由题可知密码为123456 4.找到并修改index.php文件 找到index.php文件 #内容如…

Springboot整合支付宝沙箱支付

2.配置说明 要记住这几个重要的配置 appId 这个是appIdprivateKey 商户私钥publicKey 支付宝公钥, 即对应APPID下的支付宝公钥notifyUrl 支付成功后异步回调地址(注意是必须是公网地址)returnUrl #支付后回调地址signType 签名类型 一般写 RSA2charset utf-8format json #网关…

数据结构奇妙旅程之红黑树

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

印染厂区污水怎么处理

印染厂污水处理是一项十分重要且紧迫的环境问题。随着工业化的快速发展,印染厂所排放的大量废水不仅对环境造成了严重影响,也对人们的生活和健康带来了潜在的威胁。因此,寻找有效的印染厂污水处理方法显得尤为重要。 针对印染厂污水的特点&am…

通过Arthas修改并热发布代码

通过Arthas修改并热发布代码 主要使用jad、mc、retransform三个命令: jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.javamc /tmp/UserController.java -d /tmpretransform /tmp/com/example/demo/arthas/user/UserCo…

tp8 mpdf 导出pdf

1. 安装mpdf composer require mpdf/mpdf 2. 然后 使用 use mpdf\Mpdf; 或者 require_once __DIR__ . /vendor/autoload.php; 官方文档 mPDF – mPDF 手册 文档里有很多东西 可以自己去研究 3. 编写代码 下载 (支持中文) $mpdf new Mpdf([mode > utf-8,"autoS…

实在智能与中国信通院联合牵头智能体(Agent)标准编制

近日,中国信息通信研究院(以下简称“信通院”)启动国内首个《智能体(Agent)技术要求与评估方法》系列标准编制,实在智能作为参编单位并牵头编制技术能力部分,深度参与该标准对智能体技术要求和评…

阿里云ecs服务器配置反向代理上传图片

本文所有软件地址: 链接:https://pan.baidu.com/s/12OSFilS-HNsHeXTOM47iaA 提取码:dqph 为什么要使用阿里云服务器? 项目想让别人通过外网进行访问就需要部署到我们的服务器当中 1.国内知名的服务器介绍 国内比较知名的一些…

续上篇 qiankun 微前端配置

上篇文章地址:微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】-CSDN博客 主应用: src/main.js 配置: import Vue from vue import App from ./App.vue import router from ./router import { registerMicroApps, start } …

jar读取目录配置、打包jar后无法获取目录下的配置

jar读取目录配置、打包jar后无法获取目录下的配置 jar读取目录配置、打包jar后无法获取目录下的配置。java打成jar包后获取不到配置文件路径。解决项目打成jar包上线无法读取配置文件。打包jar后无法读取resource下的配置文件 场景 需要读取 src/main/resources/mapper下的所…

【python】flask框架的生命周期,多种查询参数的获取方式

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

探索编程迷宫:选择你的职业赛道

在现代科技的浪潮中,程序员的职业赛道就像是一座迷宫,充满着前端的美丽花园,后端的黑暗洞穴,以及数据科学的神秘密室。这个迷宫中,每一条通道都充满了挑战和机遇,而每一个行走其中的人都在寻找着属于自己的…

LM studio使用gemmar聊天小试

通过LM studio可以方便的使用各种模型,使用LM提供的chat界面或者是使用python代码。 试试代码 在windows下使用python简单一试,例子直接复制LM界面上的代码: 用pip安装 openai包在LM界面 Start Server 需要安装 openai包。 本地电脑是I7…

[c++]内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd"; const char* pChar3 "abcd"; …