暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
PostgreSQL数据库分区表最佳实践.pdf
474
3页
6次
2022-09-13
5墨值下载
PostgreSQL 数据库分区表最佳实践
由于 PostgreSQL 分区表的每一个分区其实是一个个实际存在的数据表,此
unique, primary key,
exclude, foreign key 等约束,虽然语法上可以创建“全局主键”或“全局
一性索引”但其实是有条件的,我们来看以下例子(按照最常用的时间范围进
行分区)。注:此处的“全局”是作用于全部分区的意思。
创建分区表:
ID 列上增加全局主键
ID 列上创建全局唯一性索引:
通过上面信息可以看到,在 ID 列上无论是增加全局主键还是全局唯一性索引都
会失败,提示必须包含全部分区列(例子中的分区列是 timestamp 字段)
在包含分区列的字段上增加全局主键
在包含分区列的字段上增加全局主键是成功的。
通过上面例子可以看到,使用分区表存在一个潜在风险:如果 ID 在业务意
义上必须是唯一值,但分区列是时间的话,理论上会存在一个不同分区中存在相
ID 的情况。在实际系统中,该情况可能会出现在按照时间或地区进行分区的
保单表,客户信息表等关键业务表中。为了避免在使用分区表过程中遇到以上问
题,推荐两个解决思路:
一、通过程序代码进行规避:方式有主键生成器、数据校验等(在此不进行
讨论)
二、将常规的单字段主键拆分成多字段主键,其中必须包含分区字段,如在
非分区表的保单表中保单号规则为 22 位,规则如下:P + 3 位险种代码 + 4
+ 4 +Q+3 +1 +5
PLAY20224401Q000E03991,表结构及主键设计如下:
1、非分区表 policy:
policyno
字段 b
字段 c
字段 d
...
PLAY20224401Q000E03991
主键:
ALTER TABLE policy ADD PRIMARY KEY (policyno);
2、分区表 policy(按照区域分区):
policyno_nozone
zone
字段 c
字段 d
...
PLAY2022Q000E03991
4401
主键:
ALTER TABLE policy ADD PRIMARY KEY (policyno_nozone,zone);
3、分区表 policy(按照时间分区):
policyno_notime
time
字段 c
字段 d
...
PLAY4401Q000E03991
2022
主键:
of 3
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜