GBase 8c
适配迁移
问答

关于唯一索引的问题

发表于2024-06-13 18:49:15173次浏览8个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: GBase 8c v5

【操作系统】: centos7.6

【CPU】: intel

【问题描述】*: 关于唯一索引的问题

原来有个postgre的数据库,里面有张表Table1,列有三列column1,column2,column3,其中column1是主键,column2上有唯一索引,

表里存在一下数据:
column1   column2   column3

100             region1   beijing              

200             region2   guangzhou

如果想插入一条数据 300, region1, shanghai的数据,数据库会提示不能插入数据,column2必须是唯一的错误。

如果我把这张表迁移到GBase8c中,能够实现原来的逻辑不?如果能实现,那么创建表和唯一索引的sql语句应该怎么写。

评论

登录后才可以发表评论
小忘发表于 2年前
支持;语句如下:
-- 创建表
CREATE TABLE Table1 (
column1 INT PRIMARY KEY, -- 主键
column2 VARCHAR(255) UNIQUE, -- 唯一索引
column3 VARCHAR(255)
);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_column2_unique ON Table1 (column2);

insert into Table1(column1,column2,column3) values(100,'region1','beijing');
insert into Table1(column1,column2,column3) values(200,'region2','guangzhou');
insert into Table1(column1,column2,column3) values(300,'region2','shanghai');

pdbdxjk=> insert into Table1(column1,column2,column3) values(100,'region1','beijing');
INSERT 0 1
pdbdxjk=>
pdbdxjk=> insert into Table1(column1,column2,column3) values(200,'region2','guangzhou');
INSERT 0 1
pdbdxjk=> insert into Table1(column1,column2,column3) values(300,'region2','shanghai');
ERROR: dn1: duplicate key value violates unique constraint "table1_column2_key"
DETAIL: Key (column2)=(region2) already exists.
最佳回答
GBase用户16885发表于 2年前
@小忘:谢谢回复。我们有个场景是创建表的时候,没有指定唯一索引,然后在通过sql脚本创建的时候会出现错误:
-- 创建表
CREATE TABLE Table1 (
column1 INT PRIMARY KEY, -- 主键
column2 VARCHAR(255),
column3 VARCHAR(255)
);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_column2_unique ON Table1 (column2);
导演发表于 2年前
在GBase 8c中可以实现这个逻辑。

8c的分布表可以指定分布键,在这个例子中可以指定column1、column2、column3中的任意一个。与集中式架构的数据库相比,建立唯一索引时会有一个额外的要求——“建立唯一索引必须要包含分布键”。
因此,
如果使用column2作为分布键,那可以继续在column2建立唯一索引;
如果使用column1或column3作为分布键,那么就要求该索引要包含分布键,也就是唯一索引为(column1, column2)或者(column3, column2)。

这里最终是否与原库中的唯一性完全等效,需要结合具体业务数据情况进行判断。
GBase用户16885发表于 2年前
@导演:谢谢回复!
目前官网上是不是只有分布式的安装包,没有集中式的安装包,还是说分布式的安装包也可以安装为集中式的?集中式的部署手册有没有?
GBase用户16885发表于 2年前
@导演:谢谢回复!官网上我只找到了GBase8c v5分布式架构的安装包,不知道有没有GBase8c v5集中式架构的安装包?还是说分布式架构的安装包也可以配置部署为集中式的,有没有集中式架构的部署手册?我现在有【GBase 8c V5_3.0.0_安装部署手册_分布式_V2.6_202306.pdf】手册
导演发表于 2年前
@GBase用户16885:您好,目前还没有,很快就会放出试用版本了。
GBase用户51883发表于 2个月前
学习中,还不清楚。
GBase用户47954发表于 1个月前
这个问题问的好啊