文档章节

PostgreSQL10 范围分区多个字段组成KEY的约束解释

tbing
 tbing
发布于 2017/07/05 13:43
字数 482
阅读 75
收藏 0

在PostgreSQL10的分区表功能中, 范围分区的KEY支持由多个字段组成(最多32个字段)。

多列组成的KEY可看做是范围分区表的组合约束,此时就不能简单的理解为每个字段的值都在该列的约束范围内。

例如:

postgres=# create table test(n1 int, n2 int) partition by range(n1, n2);
CREATE TABLE
postgres=# create table test1 partition of test for values from(0, 0) to (10, 100);
CREATE TABLE
postgres=# create table test2 partition of test for values from(10, 100) to (20, 50);
CREATE TABLE

分区表test的KEY由两个字段组成,在分区test1中,不能理解为分区约束是:10 > n1 >= 0 && 100 > n2 >= 0,因为在分区test2中,50 > n2 >=100显然是不合适的。这种情况下的实际约束定义是:(n1 > 0 OR (n1 = 0 AND n2 >= 0))   AND   (n1 < 10 OR (n1 = 10 AND n2 < 100))。

事实上,这种多列KEY的约束定义是根据ORDER BY的形式做的。当把KEY组成的字段看做是一个Tuple时,对分区的所有Tuple做ORDER BY操作时,排序的上下限值就是分区组合约束的范围值。

这里我们创建一个普通表,插入数据,然后做一个ORDER BY操作举例说明一下。

postgres=# create table tmp(n1 int, n2 int);
CREATE TABLE
postgres=# insert into tmp values (10, 100);
INSERT 0 1
postgres=# insert into tmp values (10, 99);
INSERT 0 1
postgres=# insert into tmp values (11, 20);
INSERT 0 1
postgres=# insert into tmp values (12, 200);
INSERT 0 1
postgres=# insert into tmp values (20, 49);
INSERT 0 1
postgres=# insert into tmp values (20, 50);
INSERT 0 1
postgres=# insert into tmp values (20, 51);
INSERT 0 1
postgres=# select * from tmp order by n1, n2;
 n1 | n2  
----+-----
 10 |  99
 10 | 100
 11 |  20
 12 | 200
 20 |  49
 20 |  50
 20 |  51
(7 行记录)

以分区test2为例,这里插入的(10 , 100)和(20,50)看做是分区的下限值和上限值,中间部分的数据都是符合test2分区的约束范围。

© 著作权归作者所有

tbing
粉丝 8
博文 18
码字总数 29100
作品 0
济南
后端工程师
私信 提问
PostgreSQL10 新特性(1): 分区表特性

概述 分区表特性是PG10新加的一个比较重要的特性,也是众多PGer翘首以盼的一个功能,相比之前利用“继承表+约束+触发器/规则”实现的分区表,PG10分区表在分区管理上和数据写入上都带来了很大...

tbing
2017/11/02
183
0
TiDB 源码阅读系列文章(二十)Table Partition

作者:肖亮亮 Table Partition 什么是 Table Partition Table Partition 是指根据一定规则,将数据库中的一张表分解成多个更小的容易管理的部分。从逻辑上看只有一张表,但是底层却是由多个物...

TiDB
2018/10/29
54
0
mysql分区表整理

什么是分区表? 分区表,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。 2,分区表原理。 存储引擎管理...

落叶刀
2016/03/24
115
0
MySQL 分区表

今天统计数据的时候发现一张表使用了表分区,借此机会记录一下。 1. 什么是表分区? 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张...

郏高阳
2015/12/24
49
0
MySQL 分区表

什么是表分区? 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。 2. 表分区与分表的区别 分表:...

真爱2015
2015/12/23
59
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud 笔记之Spring cloud config client

观察者模式它的数据的变化是被动的。 观察者模式在java中的实现: package com.hxq.springcloud.springcloudconfigclient;import org.springframework.context.ApplicationListener;i...

xiaoxiao_go
48分钟前
4
0
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
今天
4
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
7
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部