postgresql10以上的自动分区分表功能

一.列分表

1.首先创建主分区表:

create table fenbiao(
id int,
year varchar
) partition by list(year)

这里设置的是根据year列进行数据分表;创建后使用navicat是看不到的;

2.创建分表:

create table fenbiao_2017 partition of fenbiao for values in ('2017')
create table fenbiao_2018 partition of fenbiao for values in ('2018')

这样这两天数据会依靠规则插入到不同分表中,如果插入一条不符合规则的数据,则会报错误:no partition of relation "fenbiao" found for row.

 

二.范围分表

1.以year列为范围进行分表

create table fenbiao2(
id int,
year varchar
) partition by range(year)

2.创建分表


create table fenbiao2_2018_2020 partition of fenbiao2 for values from ('2018') to ('2020')

create table fenbiao2_2020_2030 partition of fenbiao2 for values from ('2020') to ('2030')

注意:此时插入year=2020会插入到下面的表;如下面表范围为2021到2030,则会报错;同时插入2030也会报错;范围相当于时a<=year<b;

 

### PostgreSQL 分表方法与实现方案 #### 使用pg_partman扩展进行分表操作 `pg_partman` 是一个非常流行的PostgreSQL扩展工具,专门用来管理和维护分区表。此工具支持时间戳、整数等多种类型的列作为分区键,并能够自动化创建新的分区以及清理过期的分区数据[^2]。 对于基于范围的时间序列数据存储来说特别有用,比如日志记录或传感器采集的数据流。通过配置参数可以设定每天、每周甚至每月自动生成一个新的分区来保存新增加的信息条目;而对于不再活跃的历史部分,则可通过设置保留期限,在达到一定年龄之后被自动删除掉以释放空间资源。 ```sql CREATE EXTENSION IF NOT EXISTS pg_partman; SELECT partman.create_parent('public.sales', 'sale_date', 'native', 'daily'); ``` 上述SQL命令安装了 `pg_partman` 并将其应用于名为 "sales" 的销售订单表格之上,按照日期字段 ("sale_date") 进行每日级别的划分处理。 #### 利用原生特性——声明式分区(Declarative Partitioning) 从PostgreSQL 10开始引入了更为简便易用的新功能即声明式的分区机制。这种方式允许用户定义父级关系及其子集之间的逻辑连接而无需借助第三方插件的支持即可完成复杂度较高的多层嵌套结构设计工作[^4]。 下面是一个简单的例子展示如何利用这种内置能力构建按月份分割的大规模交易流水账本: ```sql CREATE TABLE orders ( order_id bigint, order_date date, amount numeric ) PARTITION BY RANGE (order_date); CREATE TABLE orders_january PARTITION OF orders FOR VALUES FROM ('2023-01-01') TO ('2023-02-01'); CREATE TABLE orders_february PARTITION OF orders FOR VALUES FROM ('2023-02-01') TO ('2023-03-01'); ... ``` 这里先建立了基础框架——orders 表格本身并不实际存有任何具体实例化后的实体对象而是充当着容器角色容纳后续所指定时间段内的各个独立片段集合体。接着再分别针对每个月份建立相应的物理载体承接对应区间内产生的业务活动详情记录。 为了提高查询效率并减少不必要的扫描动作次数,应当考虑为每一个单独存在的分支单元附加适当的选择性过滤条件表达式从而引导优化器做出更明智合理的路径选取决策过程中的判断依据之一。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值