<< 返回文章列表

MogDB 数据库分区表的GLOBAL和LOCAL索引区别之索引列

2024年7月4日
M
o
g
D
B
,
,
,
,
李孟洁
23

现象

 

 

创建表:
create table include_global_test (id int,col1 varchar(2))
partition by range(col1)
( partition p1 values less than ('10') ) ;
ALTER TABLE include_global_test ADD CONSTRAINT pk_include_global_test PRIMARY KEY (id);
使用工具查看主键索引,发现有两列,但是创建索引明明只有一列:

数据库版本:

现象原因

 

 

该索引为分区表的主键索引,为local索引,在创建索引时除了表的指定列,还包含tableoid列。

补充测试

 

 

01

普通表

普通表的主键约束:只包含主键列

02

分区表主键也是分区键

分区表主键也是分区键,主键索引是local,只包含主键列

03

分区表主键非分区键

分区表主键但不是分区键,主键索引是global,主键索引中除了包含主键列,还有tableoid列,主键约束:PRIMARY KEY (id) INCLUDE (tableoid)

04

分区表的global和local索引

local索引的索引列:创建索引时指定的表的字段;
global索引的索引列:除了创建索引时指定的表的字段,还有tableoid;

结论

 

 

  • 普通表和分区表local索引的索引列:创建索引时指定的表的字段;
  • 分区表global索引的索引列:除了创建索引时指定的表的字段,还有tableoid;
  • 如果索引时主键,则约束定义:PRIMARY KEY (id) INCLUDE (tableoid);
  • 其他索引根据pg_get_constraintdef() 函数查询结果为空。