PostgreSQL 10 - 数据分区

一个块的默认大小是8KB,所以,PostgreSQL的一张表可以保存最多32TB的数据。但是,大表太不方便了,应该使用分区表。
从PostgreSQL 10.0开始,用户可以更方便地处理数据分区了。

增加分区

我们先看看旧的分区办法。
在研究分区的优点之前,先展示一下如何创建分区。一切从父表开始:

postgres=# CREATE TABLE t_data (id serial, t date, payload text);
CREATE TABLE

表一共3列,我们会使用日期列做分区。
有了父表,就可以创建子表:

postgres=# CREATE TABLE t_data_2016 () INHERITS (t_data);
CREATE TABLE
postgres=# \d t_data_2016
                          数据表 "public.t_data_2016"
  栏位   |  类型   | Collation | Nullable |              Default               
---------+---------+-----------+----------+------------------------------------
 id      | integer |           | not null | nextval('t_data_id_seq'::regclass)
 t       | date    |           |          | 
 payload | text    |           |          | 
继承: t_data

t_data_2016继承了t_data。()的意思是表里没有额外的列。继承的意思是父的所有列在子表内都有效。而且,id列会继承父表的sequence,所以所有的子都分享相同的数字。
增加更多的表:

postgres=# CREATE TABLE t_data_2015 () INHERITS (t_data);
CREATE TABLE
postgres=# CREATE TABLE t_data_2014 () INHERITS (t_data);
CREATE TABLE

这些表都一样,继承自t_data。当然,子表也可以有父表不包含的列:

postgres=# CREATE TABLE t_data_2013 (special text) INHERITS (t_data);
CREATE TABLE

这样,很轻松地加了一列。它对父表没影响,只是丰富了子表-可以保存更多信息。
创建了这么多表,我们插入一行:

postgres=# INSERT INTO t_data_2015 (t, payload)
postgres-# VALUES ('2015-05-04', 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值