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,一经查实,立即删除!

相关文章

oracle pctfreepctused介绍

pctfree这个参数定义了一个块保留空间的百分比,保留空间是为了将来可能发生的更新操作,因为更新可能增大被更新行占用的空间,如果此时该块没有可利用空间,那么只有发生row migrate了,从而会降低I/O性能。换句话说&…

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

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

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

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

Qt5信号槽机制详解(最新,超级详细!!!)

Qt5信号槽机制详解 目录 信号槽机制的特征Qt4与Qt5中的connect函数讲解信号槽机制示例代码使用Lambda函数作为槽函数 1. 信号槽机制的特征 在Qt5中,信号(Signal)和槽(Slot)具有以下特征: 信号&#xff…

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

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

云原生(四)、Docker-Compose

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

前端开发者如何开发自己的地图功能

地图开发 市面上有高德,百度属于常用的,以及小程序内置的腾讯地图,通常用这部分的功能,都需要申请对应的key,来进行使用,一般刚刚开始流量不大,到没什么,流量一大就需要付费。 如何…

数库据设计最佳实践

中老年程序员,从业生涯设计过很多数据库,有用上的也有没用上的,有精心设计花无数心思更改了无数次的也有敷衍了事能用就行的,有最糟糕的设计也有感觉还不错的。在设计和修改过程中有很多疑问和感悟,在此记录一下以方便…

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文件 #内容如…

spring启动自动执行方法

原文链接: Spring Boot 启动时,让方法自动执行的 4 种方法!-阿里云开发者社区 (aliyun.com) -------------------------------------------------------------------------------------------------------------------------------- 在springBoot中我…

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…

【技术干货】MediaCrawler:一站式社交平台数据抓取利器,带你玩转小红书、抖音、快手、B站和微博数据分析

一、引言 大数据时代,社交媒体平台上的海量信息为我们提供了丰富洞察市场、研究用户行为的机会。然而,如何高效便捷地收集和整理这些分散在各平台的数据呢?今天,我们将为您揭秘一款专为小红书、抖音、快手、B站和微博打造的强大数…

用python实现视频异常检测

视频异常检测是一个复杂的任务,它涉及到对视频帧的分析和比较,以检测与正常模式不符的异常行为或事件。下面是一个基本的步骤指南,以及如何使用Python实现视频异常检测: 步骤指南 视频帧提取:首先,你需要…

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

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