PostgreSQL 17新特性之分区拆分与合并

PostgreSQL 17 增强了分区管理功能,支持分区的拆分以及合并,同时支持分区表的标识列以及排除约束功能。

本文给大家介绍一下新增的分区拆分(ALTER TABLE … SPLIT PARTITION …)和分区合并(ALTER TABLE … MERGE PARTITIONS …)功能,以及它们的使用限制和注意事项。

我们首先创建一个用于测试的分区表:

CREATE TABLE sales (id     bigint generated always as identity,area   varchar(10) not null,amount numeric not null
) PARTITION BY list (area);CREATE TABLE sales_north partition OF sales FOR VALUES IN ('华北','东北', '西北');CREATE TABLE sales_south partition OF sales FOR VALUES IN ( '华东', '中南', '西南');

分区拆分

ALTER TABLE … SPLIT PARTITION … 命令用于将单个分区拆分为多个分区,语法如下:

ALTER TABLE [ IF EXISTS ] name
SPLIT PARTITION partition_name INTO(PARTITION partition_name1 { FOR VALUES partition_bound_spec | DEFAULT },PARTITION partition_name2 { FOR VALUES partition_bound_spec | DEFAULT } [, ...])

以下命令将分区 sales_south 中区域为“华东”的数据拆分到单独的分区:

ALTER TABLE sales SPLIT partition sales_south INTO(partition sales_east FOR VALUES IN ('华东'),partition sales_south FOR VALUES IN ('中南', '西南'));

分区拆分功能支持范围分区和列表分区,但不支持哈希分区,而且只能拆分不包含子分区的简单分区。

拆分出的新分区和其他新分区或者已有分区之间不能存在重叠。如果被拆分的是 DEFAULT 分区,拆分出的新分区必须有一个是 DEFAULT 分区。如果新分区或者已有分区中存在 DEFAULT 分区,其他新分区边界之间可以存在间隔。如果被拆分的分区表不存在 DEFAULT 分区,可以将新分区中的一个设置为 DEFAULT 分区。

如果新分区不包含 DEFAULT 分区,同时分区表也没有 DEFAULT 分区,必须满足以下条件:所有新分区(partition_name1, partition_name2, …)的边界总和等于被拆分的分区边界。新分区中可以存在一个名称和被拆分的分区相同的分区,当我们拆分一个 DEFAULT 分区,并且拆分之后仍然存在 DEFAULT 时就是这种情况。

新分区的创建方法和 CREATE TABLE partition_nameN (LIKE name INCLUDING ALL EXCLUDING INDEXES EXCLUDING IDENTITY) 命令相同,索引和标识列会在完成数据迁移之后创建。新分区将会继承父表的访问方法(access method),如果父表是一个普通表,新分区也是一个普通表;如果父表是一个临时表,新分区也是一个临时表。

分区合并

ALTER TABLE … MERGE PARTITIONS … 命令用于将多个分区合并为单个分区拆分,语法如下:

ALTER TABLE [ IF EXISTS ] name
MERGE PARTITIONS (partition_name1, partition_name2 [, ...])
INTO partition_name;

以下命令将分区 sales_east 和 sales_south 合并为一个分区:

ALTER TABLE sales 
MERGE partitions ( sales_east, sales_south )
INTO sales_south;

分区合并功能支持范围分区和列表分区,但不支持哈希分区,而且只能合并不包含子分区的简单分区。

如果被合并的分区(partition_name1, partition_name2, …)中不包含 DEFAULT 分区:

  • 对于范围分区表,被合并的多个分区边界之间不能存在重叠或者间隔,否则将会返回错误。
  • 对于列表分区表,被合并的多个分区值列表将会组成新分区的值列表。

如果被合并的分区(partition_name1, partition_name2, …)中包含 DEFAULT 分区:

  • 新分区将会成为 DEFAULT 分区。
  • 对于范围分区表和列表分区表,被合并的分区可以包含任何范围或者值列表。

新分区可以与被合并的某一个分区名称相同。

合并分区时,新分区的创建方法和分区拆分时的方法相同。

注意事项

目前的实现中,分区拆分与合并操作都需要获取父表上的 ACCESS EXCLUSIVE 锁,直到完成新分区的创建以及数据迁移。这个限制导致拥有高负载的大型分区表实际上无法执行这些操作。当然,对于其他情况这两个命令还是很方便的。

PostgreSQL 17 刚刚引入了这两个功能,将来的版本肯定会减少锁定的资源,并且支持并行操作,从而变得更加实用。

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

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

相关文章

【Vue】普通组件的注册使用-局部注册

文章目录 一、组件注册的两种方式二、使用步骤三、练习 一、组件注册的两种方式 局部注册:只能在注册的组件内使用 ① 创建 .vue 文件 (三个组成部分) 以.vue结尾的组件,一般也叫做 单文件组件,即一个组件就是组件里的全部内容 ② 在使用的组…

分享一款提取抖音小店商家电话的软件使用教程

抖音作为一款国内非常流行的短视频分享平台,吸引了大量用户和商家。许多商家在抖音上开设了小店,但是抖音并没有提供直接获取商家电话的功能。本文将分享一款提取抖音小店商家电话的软件,并附带使用教程和代码。 教程 步骤一:安…

Qt窗口与对话框

目录 Qt窗口 1.菜单栏 2.工具栏 3.状态栏 4.滑动窗口 QT对话框 1.基础对话框QDiaog 创建新的ui文件 模态对话框与非模态对话框 2.消息对话框 QMessageBox 3.QColorDialog 4.QFileDialog文件对话框 5.QFontDialog 6.QInputDialog Qt窗口 前言:之前以上…

自定义指令:Vue允许注册全局或组件级的自定义指令,以实现对常规DOM元素的复杂操作

简介 Vue自定义指令的概念 在Vue.js中,指令(Directives)是一些预定义的特殊属性,它们以v-为前缀,用于对DOM元素进行一些特殊的操作。而自定义指令则是用户自己定义的一种特殊功能,它可以像Vue内置的指令一样使用,以达到复用和模块化的目的。 自定义指令提供了一种机制,…

单双目视频转图片

视频转图片 视频转图片 输入文件夹路径,里面时mp4视频 输出的是每隔1秒提取到的视频帧 interval是每隔多少秒保存一张图片 import cv2 import osimg_count 1def save_frames(video_path, output_folder, interval):# 创建保存图片的文件夹if not os.path.exists(ou…

Linux驱动开发笔记(三)平台设备驱动

文章目录 前言一、Linux的设备模型1. 总线1.1 bus_type结构体1.2 注册/注销总线 2. 设备2.1 device结构体2.2 内核注册/注销设备 3. 驱动3.1 device_driver结构体3.2 注册/注销驱动 4. attribute属性文件4.1 attribute_group结构体4.2 设备属性文件4.3 驱动属性文件4.3. 总线属…

数组array 和 array的区别

问题 对于数组 array和&array有什么区别呢? 先说答案 array: 指向数组第一个数地址的指针 &array: 指向整个数组地址的指针 所以直接打印的话, 地址是一样的. 但是如果1的话, 那么array是增加sizeof(int)大小, &array是增加sizeof(int) * array.size() 测试 #i…

printf(“不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾“);

/*无线通讯语言模块测试PAST 2019 12 28 L298 CODE1871**/ #include <REG52.H> #include <intrins.H> #include "stdio.h" #define uint unsigned int #defi…

必应bing国内广告账户如何注册推广呢?

作为全球第二大搜索引擎&#xff0c;必应Bing以其庞大的用户基础和精准的定向能力&#xff0c;为企业提供了拓展市场的绝佳平台。对于许多企业来说&#xff0c;必应Bing广告账户的注册与推广流程可能显得复杂而繁琐。此时&#xff0c;您不妨考虑携手云衔科技&#xff0c;共同开…

一篇文章告诉你为什么要考TOGAF证书?

TOGAF&#xff08;The Open Group Architecture Framework&#xff09;是一种被广泛应用于企业架构领域的框架和方法论。TOGAF证书作为对TOGAF知识体系的认可架构师群体中受喜爱。本文将探讨为什么TOGAF证书如此受欢迎&#xff0c;并解释其在企业架构中的重要性。 TOGAF证书的…

程序员职业素养:AI新时代下的机遇与挑战

目录 一、引言二、程序员职业素养的五大要点1. 技术能力2. 沟通能力3. 团队合作4. 责任心5. 敬业精神 三、实际案例解析四、程序员职业素养在实际工作中的应用五、AI新时代的程序员的职业发展建议六、总结七、结语 一、引言 在当今这个科技飞速发展的时代&#xff0c;程序员这…

景区ar互动大屏游戏化体验提升营销力度

从20世纪60年代的初步构想&#xff0c;到如今全球范围内无数企业的竞相投入&#xff0c;AR增强现实技术已成为引领科技潮流的重要力量。而在这一浪潮中&#xff0c;中国的AR公司正以其独特的魅力和创新力&#xff0c;崭露头角。 中国的AR市场正在迎来前所未有的发展机遇。如今&…

AI时代的浪潮

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经从科幻概念变为现实&#xff0c;深刻地影响着我们的工作和生活。在这个AI时代&#xff0c;我们将通过十个具有代表性的网站链接&#xff0c;一同探索AI技术的广泛应用和未来发展。 一、AI与人力资源管理…

展锐8541E配置USB ACM

1、kernel config 参考如下修改 cd bsp source build/envsetup.sh lunch 34 kuconfig -> Device Drivers ---> USB support ---> USB Gadget Support ---> [*] Abstract Control Model (CDC ACM)--- kernel/kernel4.14/arch/arm/configs/sprd_sharkle_defc…

将现有web项目打包成electron桌面端教程(一)vue3+vite+js版

说明&#xff1a;后续项目需要web端和桌面端&#xff0c;为了提高开发效率&#xff0c;准备直接将web端的代码打包成桌面端&#xff0c;在此提前记录一下demo打包的过程&#xff0c;需要注意的是vue2或者vue3vitets或者vue-cli的打包方式各不同&#xff0c;如果你的项目不是vue…

CasaOS玩客云如何部署小雅AList并结合内网穿透远程访问海量资源

文章目录 前言1. 本地部署AList2. AList挂载网盘3. 部署小雅alist3.1 Token获取3.2 部署小雅3.3 挂载小雅alist到AList中 4. Cpolar内网穿透安装5. 创建公网地址6. 配置固定公网地址 前言 本文主要介绍如何在安装了CasaOS的玩客云主机中部署小雅AList&#xff0c;并在AList中挂…

Ubuntu系统的k8s常见的错误和解决的问题

K8s配置的时候出现的常见问题 Q1: master节点kubectl get nodes 出现的错误 或者 解决方法&#xff1a; cat <<EOF >> /root/.bashrc export KUBECONFIG/etc/kubernetes/admin.conf EOFsource /root/.bashrc重新执行 kubectl get nodes 记得需要查看一下自己的…

为什么RPC要比Http高效?

RPC和HTTP RPC&#xff08;Remote Procedure Call&#xff09;基于TCP连接通常比HTTP在性能上要高很多&#xff0c;原因如下&#xff1a; 1. 协议开销 HTTP开销&#xff1a; HTTP协议报文头部相对较大&#xff0c;包含大量的元数据&#xff08;如方法、URI、头字段等&#x…

【粽子大师】甜咸粽之争来看大师pick谁

概述 粽子大师是一款专门设计用来回答关于粽子制作和历史的问题的应用。无论用户是想了解甜粽还是咸粽的制作方法&#xff0c;或是希望探索粽子的地域文化差异&#xff0c;粽子大师都能提供详细的解答和指导。 功能详述 角色任务 粽子历史和文化专家: 详细了解甜咸粽子之争的…

【实用技巧】Unity的Button组件使用技巧

Unity的Button组件是构建交互式用户界面的强大工具。以下是一些使用Button组件的技巧&#xff0c;可以帮助你提高开发效率和用户体验&#xff1a; 1. **使用Button的OnClick事件**&#xff1a; - 利用OnClick()事件来触发函数&#xff0c;这是响应用户点击的最简单方式。 …