首页 > 其他分享 >1、postgres通过partition做表分区

1、postgres通过partition做表分区

时间:2024-03-21 17:47:07浏览次数:30  
标签:01 做表 postgres 分区 partition stu student date tb

目录

postgres通过partition做范围表分区

表分区是将一个表的数据拆分成多个物理表去存储,查询的时候合并成一个表查询。

首先确保当前的 postgres 版本支持表分区的,如果不支持,可以安装 pg_partman 扩展。

1、安装pg_partman扩展

CREATE EXTENSION pg_partman;

2、创建需要分区表,按学生的入学时间分区

PARTITION BY RANGE 可以通过学生的入学时间 stu_enrol_date 按年去分区。

CREATE TABLE tb_student ( 
	stu_id INT NOT NULL, 
	stu_name VARCHAR ( 100 ) NOT NULL, 
	stu_sex VARCHAR ( 2 ), 
	stu_age INT, 
	stu_grade VARCHAR ( 2 ), 
	stu_enrol_date DATE NOT NULL 
) PARTITION BY RANGE ( stu_enrol_date );

3、创建分区

可以随时增加分区

create table tb_student_2020 partition of tb_student for VALUES from ('2020-01-01') to ('2020-12-31');
create table tb_student_2021 partition of tb_student for VALUES from ('2021-01-01') to ('2021-12-31');
create table tb_student_2022 partition of tb_student for VALUES from ('2022-01-01') to ('2022-12-31');

4、插入数据

插入的数据会自动根据 stu_enrol_date 放入到指定的分区表中

insert into tb_student(stu_id,stu_name,stu_sex,stu_age,stu_grade,stu_enrol_date) values (1,'小米','男',12,'6',to_date('2020-03-01','yyyy-MM-dd'));
insert into tb_student(stu_id,stu_name,stu_sex,stu_age,stu_grade,stu_enrol_date) values (2,'小明','男',11,'6',to_date('2021-03-01','yyyy-MM-dd'));
insert into tb_student(stu_id,stu_name,stu_sex,stu_age,stu_grade,stu_enrol_date) values (3,'小红','男',10,'5',to_date('2020-03-01','yyyy-MM-dd'));
insert into tb_student(stu_id,stu_name,stu_sex,stu_age,stu_grade,stu_enrol_date) values (4,'小王','男',12,'6',to_date('2022-03-01','yyyy-MM-dd'));
insert into tb_student(stu_id,stu_name,stu_sex,stu_age,stu_grade,stu_enrol_date) values (5,'小吴','男',10,'6',to_date('2021-03-01','yyyy-MM-dd'));

5、查询分区表

查询分区表时:合并查询

select * from tb_student;

结果显示全都是刚才插入的数据。

查询子分区表时:

select * from tb_student_2021;

显示stu_id为2、5的记录

6、不需要子分区时

可以指定某个子分区表删除,数据也会跟随一起删除。

drop table tb_student_2021;

7、直接插入子分区表时。

到直接 insert 到 tb_student_2020 表时,会去校验 stu_enrol_date 的约束,是否满足当前分区的结果。

正常:

insert into tb_student_2020(stu_id,stu_name,stu_sex,stu_age,stu_grade,stu_enrol_date) values (6,'小轩','男',12,'6',to_date('2020-03-01','yyyy-MM-dd'));

不满足时:

insert into tb_student_2020(stu_id,stu_name,stu_sex,stu_age,stu_grade,stu_enrol_date) values (7,'小轩','男',12,'6',to_date('2021-03-01','yyyy-MM-dd'));

报错:ERROR: new row for relation "tb_student_2020" violates partition constraint DETAIL: Failing row contains (7, 小轩, 男, 12, 6, 2021-03-01).

8、navicat可以查看到分区的表与分区的维度

找到 tb_student ,点击设计表,点击分区就可以查看到分区的详情信息了。

标签:01,做表,postgres,分区,partition,stu,student,date,tb
From: https://www.cnblogs.com/lgxdev/p/18087887

相关文章

  • <sa8650>sa8650 partition-之-新增分区加img
    <sa8650>sa8650partition-之-新增分区加img一、前言二、新增分区2.1新增用户分区2.2生成新分区文件2.3确认新分区文件2.4rawprogram文件参数解析2.5新增分区验证三、镜像文件3.1新增water.img编译脚本3.2新增water.img编译脚本运行3.3新增water......
  • springboot下postgresql指定schema问题
    首先明确用的postgresql版本是PostgreSQL9.5.25,compiledbyVisualC++build1800,64-bitspringboot是2.3.5.RELEASE。现有的文档提供的连接数据库配置方式是url:jdbc:postgresql://IP:端口/数据库名?currentSchema=模式名&stringtype=unspecified通常postgresq......
  • 使用Python-psycopg访问postgres、openGauss、MogDB
    摘要Psycopg是一种用于执行SQL语句的PythonAPI,可以为PostgreSQL、GaussDB数据库提供统一访问接口,应用程序可基于它进行数据操作。Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全。它具有客户端游标和服务器端游标、异步通信和通知、支持“COPYTO/COPYFROM”......
  • 【PostgreSQL PGCE-091题目解析14】PostgreSQL中使用CONCURRENTLY选项创建索引时,允许
    本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。PostgreSQL中使用CONCURRENTLY选项创建索引时,允许增删改数据表。A.正确B.错误参考答案:A解析:我们知道,PG是有行级琐的,在创建索引的时候,会在行上加琐......
  • Clique Partition
    哎,就差一个考虑上下界啊!来看看官解首先一个连通块的大小不可能超过\(k\),比较显然当\(n>k\)的时候,我们将点连续的分成\(\lceil\frac{n}{k}\rceil\)个,然后考虑\(n=k\)的情形官解是这么分权值的其实我考试的时候想出来这个的,手搓几次样例就可以发现了。。但是我却没有利用上......
  • Codeforces 1948E Clique Partition
    考虑到有\(|i-j|\),所以肯定是让相邻的一部分在一个团里。考虑构造出一个最长长度的,后面类似复制几遍即可。考虑到\(|k-1|=k-1\),且因为\(a_i\)为一个排列,差的绝对值至少为\(1\),所以只考虑两端最长长度也只可能为\(k\)。不妨先假设最长长度为\(k\)来构造。那么......
  • openGauss与postgresql日常使用差异
    openGauss与postgresql日常使用差异密码加密postgresql默认密码加密方式是md5。openGauss默认密码加密方式是sha256。使用navicate、pgadmin3等客户端开发工具访问og,需要修改加密方式。如果在本地用用户名密码登陆数据库没问题。但是用其他工具连接数据......
  • PostgreSQL与openGauss之分区性能
    PostgreSQL与openGauss之分区性能概述PostgreSQL与openGauss分区表定义差异,请参考https://www.modb.pro/db/41393。openGauss1.1.0开始支持hash/list分区,hash分区表最多支持64个分区,否则会报:ERROR:Un-supportfeatureDETAIL:Thepartition’slengthshouldbe......
  • PostgreSQL与openGauss之关键字
    PostgreSQL与openGauss之关键字日常数据库运维的过程中可能对数据库关键字关注点并不是很高,但在程序开发的过程中,数据库对象建模要尽可能的避开数据库关键字的使用,否则在后续开发过程中需要用到各种转译的方法来将关键字转换为普通字符,会非常的麻烦。最近在openGauss上执行......
  • PostgreSQL从入门到精通教程 - 第46讲:poc-tpch测试
       PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第46讲:POC-TPCH测试  内容1:TPC-H介绍内容2:TPC-H......