openGauss分区表的学习:
从官方对分区表的描述和要相关操作,跟oracle分区表差不多,分区类型少了个组合分区。
分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储,这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。
分区表可分为范围分区(Range Partitioning)、间隔分区(Interval Partitioning)、哈希分区(Hash Partitioning)、列表分区(List Partitioning)、数值分区(Value Partition)等。
目前行存表支持范围分区、间隔分区、哈希分区、列表分区,列存表仅支持范围分区。
分区表好处:
可以减少数据的搜索空间,提高数据访问效率。
如需大量加载或者删除的记录位于某个分区上可通过直接读取或删除那个分区以获得性能提升,且可以避免由于大量DELETE导致的VACUUM超载(仅范围分区)。
注意事项:
- 唯一约束和主键约束的约束键包含所有分区键将为约束创建LOCAL索引,否则创建GLOBAL索引。
- 目前哈希分区和列表分区仅支持单列构建分区键,暂不支持多列构建分区键。
- 只需要有间隔分区表的INSERT权限,往该表INSERT数据时就可以自动创建分区。
https://opengauss.org/zh/docs/2.1.0/docs/Developerguide/CREATE-TABLE-PARTITION.html
语法格式
CREATE TABLE [ IF NOT EXISTS ] partition_table_name
( [
{ column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE source_table [ like_option [...] ] }[, ... ]
] )
[ WITH ( {storage_parameter = value} [, ... ] ) ]
[ COMPRESS | NOCOMPRESS ]
[ TABLESPACE tablespace_name ]
PARTITION BY {
{RANGE (partition_key) [ INTERVAL ('interval_expr') [ STORE IN (tablespace_name [, ... ] ) ] ] ( partition_less_than_item [, ... ] )} |
{RANGE (partition_key) [ INTERVAL ('interval_expr') [ STORE IN (tablespace_name [, ... ] ) ] ] ( partition_start_end_item [, ... ] )} |
{LIST | HASH (partition_key) (PARTITION partition_name [VALUES (list_values_clause)] opt_table_space )}
} [ { ENABLE | DISABLE } ROW MOVEMENT ];
复制
这一练的一些命令和视图:
pg_partition 查看分区信息
\d+或\d:查看所有表信息复制
课程练习
1.创建一个含有5个分区的范围分区表store,在每个分区中插入记录
openGauss=# create table store
openGauss-# (
openGauss(# c1 int,
openGauss(# c2 CHAR(2)
openGauss(# )
openGauss-# partition by range (c1)
openGauss-# (
openGauss(# partition store_table_p0 values less than (50),
openGauss(# partition store_table_p1 values less than (100),
openGauss(# partition store_table_p2 values less than (150),
openGauss(# partition store_table_p3 values less than (200),
openGauss(# partition store_table_p4 values less than (300)
openGauss(# );
CREATE TABLE
openGauss=#
openGauss=# insert into store values (1, 'a'), (50, 'b'), (100, 'c'),(200, 'a'), (290, 'b');
INSERT 0 5
openGauss=#
复制
2.查看分区1上的数据
openGauss=# select * from store partition(store_table_p0);
c1 | c2
----+----
1 | a
(1 row)
复制
3.重命名分区2
openGauss=# alter table store rename partition store_table_p1 to store_table_p10;
ALTER TABLE
openGauss=#
复制
4.删除分区5
openGauss=# alter table store drop partition store_table_p4;
ALTER TABLE
复制
5.增加分区6
openGauss=# alter table store add partition store_table_p5 values less than (400);
ALTER TABLE
复制
6.在系统表pg_partition中查看分区信息
openGauss=# select * from pg_partition;
relname | parttype | parentid | rangenum | intervalnum | partstrategy | relfilenode | reltablespace | relpages | reltuples | relallvisible | re
ltoastrelid | reltoastidxid | indextblid | indisusable | reldeltarelid | reldeltaidx | relcudescrelid | relcudescidx | relfrozenxid | intspnum | partkey
| intervaltablespace | interval | boundaries | transit | reloptions | relfrozenxid64
-----------------+----------+----------+----------+-------------+--------------+-------------+---------------+----------+-----------+---------------+---
------------+---------------+------------+-------------+---------------+-------------+----------------+--------------+--------------+----------+--------
-+--------------------+----------+------------+---------+---------------------------------------------------+----------------
store | r | 24646 | 0 | 0 | r | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | t | 0 | 0 | 0 | 0 | 0 | | 1
| | | | | {orientation=row,compression=no,wait_clean_gpi=n} | 0
store_table_p0 | p | 24646 | 0 | 0 | r | 24650 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | t | 0 | 0 | 0 | 0 | 93652 | |
| | | {50} | | {orientation=row,compression=no} | 93652
store_table_p2 | p | 24646 | 0 | 0 | r | 24652 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | t | 0 | 0 | 0 | 0 | 93652 | |
| | | {150} | | {orientation=row,compression=no} | 93652
store_table_p3 | p | 24646 | 0 | 0 | r | 24653 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | t | 0 | 0 | 0 | 0 | 93652 | |
| | | {200} | | {orientation=row,compression=no} | 93652
store_table_p10 | p | 24646 | 0 | 0 | r | 24651 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | t | 0 | 0 | 0 | 0 | 93652 | |
| | | {100} | | {orientation=row,compression=no} | 93652
store_table_p5 | p | 24646 | 0 | 0 | r | 24655 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | t | 0 | 0 | 0 | 0 | 99771 | |
| | | {400} | | {orientation=row,compression=no} | 99771
(6 rows)
openGauss=#
复制
7.删除分区表
openGauss=# drop table store;
DROP TABLE
复制
最后修改时间:2021-12-09 21:35:34
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年3月国产数据库大事记
墨天轮编辑部
728次阅读
2025-04-03 15:21:16
内蒙古公司成功完成新一代BOSS云原生系统割接上线
openGauss
211次阅读
2025-03-24 09:40:40
openGauss 7.0.0-RC1 版本正式发布!
Gauss松鼠会
167次阅读
2025-04-01 12:27:03
openGauss 7.0.0-RC1 版本体验:一主一备快速安装指南
孙莹
149次阅读
2025-04-01 10:30:07
MogDB 发布更新,解决 openGauss 数据库在长事务情况下Ustore表膨胀问题
云和恩墨
125次阅读
2025-04-16 09:52:02
从数据库源码比较 PostgreSql和OpenGauss的启动过程
maozicb
92次阅读
2025-03-24 15:55:04
一文快速上手openGauss
进击的CJR
88次阅读
2025-03-26 16:12:54
openGauss HASH JOIN原理
lbsswhu
66次阅读
2025-03-18 10:45:01
openGauss 学习之路:集群部署实战探索
openGauss
65次阅读
2025-03-21 10:34:13
opengauss使用gs_probackup进行增量备份恢复
进击的CJR
54次阅读
2025-04-09 16:11:58