PostgreSQL 分区

       由于大量数据存储在数据库同一张表中,后期性能和扩展会受到影响。所以需要进行表分区,因为它可以将大表分成较小的表,从而减少内存交换问题和表扫描,最终提高性能。庞大的数据集被分成更小的分区,更易于访问和管理。

什么是 PGSQL?

PGSQL 是一个开源关系数据库系统。它支持关系 (SQL) 和非关系 (JSON) 查询。它被用作基于 Web 、移动和分析应用程序的主要数据库。

以下是 PGSQL 的一些常见用例:

  • LAPP(Linux、Apache、PostgreSQL 和 PHP)堆栈中的强大数据库。

  • 地理空间数据库。

  • 通用事务数据库。

PGSQL的主要特性

  • 用户定义的数据类型:PGSQL 可以扩展以创建用户定义的数据类型。

  • 复杂的锁定机制:存在三种锁定机制,行级锁、表级锁和资询锁。

  • 表继承:PGSQL 允许基于另一个表创建子表。

  • Foreign Key Referential Integrity:指定外键值对应于另一个表中的实际主键值。

嵌套事务(保存):这意味着子查询的结果不会在其父查询回滚时回滚。但是对于保存,若顶层事务被回滚,所有的保存点也会被回滚。

什么是 PGSQL 分区?

分区是指将一个大表拆分成更小的物理块,这些块可以根据其用途存储在不同的存储介质中。每个部分都有其特点和名称。分区有助于提高数据库服务器的性能,因为需要读取、处理和返回的行数明显减少。您还可以使用 PostgreSQL 分区来划分索引和索引表。

PGSQL 分区主要有两种类型:垂直分区和水平分区。在垂直分区中,我们按列划分,在水平分区中,我们按行划分。

水平分区涉及将不同的行放入不同的表中。例如,您将 18 岁以上学生的详细信息存储在一个分区中,将 18 岁以下的学生详细信息存储在另一个分区中。可以在两个分区上创建联合视图以显示所有学生。

垂直分区包括创建列较少的表,并使用其他表来存储剩余的列。规范化还涉及到跨表的列分割,但是垂直分区不仅限于此,甚至在已经规范化的情况下还会对列进行分区。

如何创建分区表

简单描述一下自己创建分区表的步骤(水平,按创建时间分区)

1. 创建主表 分区键:order_created_time

CREATE TABLE "mac_id_new" ("id" int8,"created_by" varchar(255) COLLATE "pg_catalog"."default","created_time" timestamp(6),"last_modified_by" varchar(255) COLLATE "pg_catalog"."default","last_modified_time" timestamp(6),"deleted" bool,"deleted_by" varchar(255) COLLATE "pg_catalog"."default","deleted_time" timestamp(6),"optimistic_locking_version" int8,"order_id" int8,"order_created_time" timestamp(6)
) PARTITION by range(order_created_time);

2.创建分区表函数 

CREATE OR REPLACE FUNCTION f_create_partition_table(t_name VARCHAR,bengin_date TIMESTAMP ,end_date TIMESTAMP)
RETURNS boolean AS $$
DECLAREcreate_partition_table_sql varchar(1024);create_table_index_sql varchar(1024);create_table_pk_sql varchar(1024);bengin_date_str varchar(64);end_date_str varchar(64);query_partition_table_sql varchar(1024);t_row record;
beginbengin_date_str := to_char(bengin_date,'YYYYMMDD');end_date_str := to_char(end_date,'YYYYMMDD');create_partition_table_sql := ' create table if not exists '||  t_name ||'_' || bengin_date_str  || '_' || end_date_str ||' partition of '||t_name ||' for values from ('''|| bengin_date ||''') ' ||' to ('''|| end_date ||''')';create_table_index_sql := ' CREATE INDEX IF NOT EXISTS idx_'|| t_name ||'_'|| bengin_date_str || '_' || end_date_str ||'_business_id ON '|| t_name ||'_'|| bengin_date_str || '_' || end_date_str || ' USING btree (business_id);';create_table_pk_sql := 'ALTER TABLE '|| t_name ||'_' || bengin_date_str || '_' || end_date_str ||' ADD CONSTRAINT '|| t_name ||'_' || bengin_date_str || '_' || end_date_str ||'_PK PRIMARY KEY ("id");';execute create_partition_table_sql;execute create_table_index_sql;execute create_table_pk_sql;return true;
end;
$$ LANGUAGE plpgsql;

3.创建分区表,执行后刷新数据库,在表mac_id_new下查看验证分区表

SELECT f_create_partition_table('mac_id_new','2023-07-01','2024-01-01');
SELECT f_create_partition_table('mac_id_new','2024-01-01','2024-07-01');
SELECT f_create_partition_table('mac_id_new','2024-07-01','2025-01-01');
SELECT f_create_partition_table('mac_id_new','2025-01-01','2025-07-01');
SELECT f_create_partition_table('mac_id_new','2025-07-01','2026-01-01');

 

最后进行数据迁移,数据校验,至此分区表创建完成

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

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

相关文章

入门Python数据分析最好的实战项目

本篇将继续上一篇数据分析之后进行数据挖掘建模预测,这两部分构成了一个简单的完整项目。结合两篇文章通过数据分析和挖掘的方法可以达到二手房屋价格预测的效果。 下面从特征工程开始讲述。 特征工程 特征工程包括的内容很多,有特征清洗,…

DevOps(9)

目录 45.如何在Linux中将一个文件附加到另一个文件? 46.解释如何使用终端找到文件? 47.解释如何使用终端创建文件夹? 48.解释如何使用终端查看文本文件? 49.解释如何在Ubuntu LAMP堆栈上启用curl? 50.解释如何在…

Spring Cloud Gateway 缓存区异常

目录 1、问题背景 2、分析源码过程 3、解决办法 最近在测试环境spring cloud gateway突然出现了异常,在这里记录一下,直接上干货 1、问题背景 测试环境spring cloud gateway遇到以下异常 DataBufferLimitException: Exceeded limit on max bytes t…

YOLOv5独家原创改进:新颖的Shape IoU结合 Inner-IoU,基于辅助边框的IoU损失的同时关注边界框本身的形状和尺度,小目标实现高效涨点

💡💡💡本文改进:一种新的Shape IoU方法结合 Inner-IoU,基于辅助边框的IoU损失的同时,更加关注边界框本身的形状和尺度来计算损失 💡💡💡对小目标检测涨点明显,在VisDrone2019、PASCAL VOC均有涨点 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/ca…

图像处理中的DCT变换

图像处理中的DCT变换 Discrete Cosine Transform,离散余弦变换。 来源及公式推导,可以查看下面链接,介绍的比较详细,这里就不再重复说明了: 详解离散余弦变换(DCT) - 知乎 (zhihu.com)DCT变换…

Excel如何将单元格设为文本

文章目录 一、打开excel文件二、选中单元格三、右键设置单元格格式四、设置界面选择文本后点确定五、其他问题 在caa开发过程中遇到从CATUnicodeString转成CString时,通过SetItemText写入将ID号写入单元格,无法保存ID号中的数字0,故将单元格格…

03 decision tree(决策树)

一、decision tree(决策树) 1. classification problems(纯度) i . entropy (熵) ​ 作用:衡量一组数据的纯度是否很纯 ,当五五开时他的熵都是最高的,当全是或者都不是…

【计算机算法设计与分析】棋盘覆盖问题(C++_分治法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在一个 2 k 2 k 2^k \times 2^k 2k2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一个特殊方格,且称该棋盘为一个特殊棋盘。显然,特殊方格在棋…

mysql之CRUD和常见函数和UNION 和 UNION ALL

mysql之CRUD和常见函数和UNION 和 UNION ALL 一.CRUD1.创建(Create) - 插入数据2.读取(Read) - 查询数据3.更新(Update) - 修改数据4.删除(Delete) - 删除数据 二.函数1.字符串函数&…

并发程序设计--D4GDB调试多进程程序

使用GDB调试此程序 start后 10行进入father进程,接下来会一直在父进程不断执行程序 那么如何进入子进程? 此时杀死此程序进程 重新gdb调试,使用以下命令,再使用n,可进入子进程 那么如何同时调试父进程和子进程 上图可…

年终护眼台灯哪个好用?适合学生备考的台灯推荐

最近临近寒假,就有好多家长们和高校学子们催我推荐护眼台灯,人眼对光是非常敏感的,特别是儿童青少年眼睛还在发育的状态来说,光线是至关重要的,于是这次选择的护眼台灯我都是经过亲自使用测试的。 但由于现在护眼台灯…

【kettle】pdi/data-integration 打开ktr文件报错“Unable to load step info from XML“

一、报错内容: Unable to load step info from XML step nodeorg.pentaho.di.core.exception.KettleXMLException: Unable to load step info from XMLat org.pentaho.commons.launcher.Launcher.main (Launcher.java:92)at java.lang.reflect.Method.invoke (Met…

FA2016AA (MHz范围晶体单元超小型低轮廓贴片) 汽车

随着科技的不断发展,智能汽车逐渐成为人们出行的首选。而其中,频率范围在19.2 MHz ~ 54 MHz的晶体单元超小型低轮廓贴片(FA2016AA)为汽车打造更智能、更舒适、更安全的出行体验。FA2016AA贴片的外形尺寸为2.0 1.6 0.5 mm&#x…

新手深入浅出理解PyTorch归一化层全解析

目录 torch.nn子模块normal层详解 nn.BatchNorm1d BatchNorm1d 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.BatchNorm2d BatchNorm2d 函数简介 函数工作原理 参数详解 使用技巧与注意事项 示例代码 nn.BatchNorm3d BatchNorm3d 函数简介 参…

防浪涌TVS:电子设备的保护盾?|深圳比创达电子

在电子设备日益普及的今天,我们经常会听到设备因电压波动或突发浪涌而损坏的情况。那么,有没有一种方式可以保护我们的设备免受这些意外伤害?答案就是“防浪涌TVS(Transient Voltage Suppressor)”。但它是什么?它如何工作&#x…

华为欧拉安装部署:Oracle11g

一、环境准备 1、下载安装低版本的libaio包;libaio版本太高,会造成编译错误 查看libaio1库版本不能大于0.3.109 [oracles3 install]$ rpm -qa libaio libaio-0.3.110-12.el8.x86_64# 查看欧拉操作系统版本 [oraclelocalhost bin]$ cat /etc/os-release…

mcu与上位机通讯数据传输测速

问题 如何测量mcu与上位机通讯数据传输速度?(串口、USB) 解决 可以借助Bus Hound 将显示时间戳勾上。 发送一段固定长度的数据,然后除起始和结束的时间差 最后计算即可。

全屏字幕滚动APP:12月份广告总收:84.89元(2023年12月份) 穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益

接入穿山甲SDK app示例: android 数独小游戏 经典数独休闲益智 广告接入示例: Android 个人开发者如何接入广告SDK,实现app流量变现 2023年12月份,总新增用户1242 友盟统计: 12月份:总新增用户1242 2023年12月份…

Prompt提示工程上手指南:基础原理及实践(一)

想象一下,你在装饰房间。你可以选择一套标准的家具,这是快捷且方便的方式,但可能无法完全符合你的个人风格或需求。另一方面,你也可以选择定制家具,选择特定的颜色、材料和设计,以确保每件家具都符合你的喜…

Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found

IDEA创建spring boot项目的时候,pom.xml 文件中spring-boot-maven-plugin报红。 解决方法: 给spring-boot-maven-plugin指定版本 原因: idea自动找的插件版本是其他版本的,和自己设置的不同,导致idea在本地maven仓库…