openGauss中创建唯一索引和创建唯一约束的区别
今天一个一起搬砖的兄弟同事过来问,为什么他的索引删不掉?我过去看了下:
执行脚本:
drop index constraint_unique
报错如下:
执行时出错 确认要继续执行吗?
单击“详细信息”了解详情。
SQL错误码: = 2BP01
ERROR: cannot drop index constraint_unique because constraint constraint_unique on table t1 requires it
Hint: You can drop constraint constraint_unique on table t1 instead.
行号: 19
报错大意是:不能删除索引constraint_unique因为约束constraint_unique在表t1上引用了它。
暗示:你可以删除约束constraint_unique在表t1上来代替它。
于是我执行drop constraint的语句,删除成功。
alter table t1 drop CONSTRAINT constraint_unique;
究其原因,该索引并不是通过create index直接创建的,而是在创建唯一约束的时候顺带创建的。实验发现,openGauss在创建唯一约束的时候,同时会创建一个唯一索引,当然在删除唯一约束的同时,也会删除掉创建唯一约束时附带创建的唯一索引;
但是在创建唯一索引的时候,并不会同时显式创建一个唯一约束。通过创建索引直接创建的索引,好像有点绕咔咔咔,则可以直接通过drop index的方式删除。
再对比下创建唯一索引和唯一约束后,在插入重复数据时的区别:
- 唯一索引:插入重复数据时报错,插入时也报唯一约束冲突
ERROR: duplicate key value violates unique constraint “idx_unique”
Detail: Key (c1)=(1) already exists.
- 唯一约束:
ERROR: duplicate key value violates unique constraint “constraint_unique”
Detail: Key (c1)=(1) already exists.
那么约束是否存在呢?我对于增加唯一约束的场景,尝试执行 drop constraint的操作,系统会报错constraint不存在,这说明确实没有创建约束。
执行时出错 确认要继续执行吗?
单击“详细信息”了解详情。
SQL错误码: = 42704
ERROR: constraint “idx_unique” of relation “test” does not exist
行号: 2
来自:如鱼得水

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
履约核心引擎低代码化原理与实践
撰写部门:Y-供应链研发部-履约研发部 1、导读 业界,规则引擎是一个非常普遍的技术类工具,也有很多非常优秀的开源工具,例如Drools等,它是一种嵌入在应用程序中的组件,主要解决易变逻辑和业务耦合的问题,把易变的规则从应用程序代码中分离出来,进而提升交付效率,降低应用程序维护和可扩展性成本。 然而,行业上开源的规则引擎,在互联网场景使用却存在诸多障碍。从技术上来看,面对特大流量的高并发略显不足;从交付上看,操作语言是以研发视角,无法让更多的非技术人员参与来实现交付链条的最大化降低;从实施上,也没有配套的标准化架构开放规范,无法规模化的让规则从应用程序代码中实现分离。 基于此,京东供应链研发部自研了一套,面向业务角色的海纳低代码规则引擎平台,产品定位是面向业务、研发多角色一体化的零低代码开发平台,这其中规则引擎是其最核心的部分之一。 这个平台,不仅可以高效的支持互联网高并发业务,它还具有一套标准化扩展开放的能力。基于此业务系统可以快速实现业务规则的规模化开放,短短4个月内,低成本开放了近100+个扩展点,抽取沉淀了近400+个业务规则,支持了14+个京东核心链路重大项目,产品经理/IS...
- 下一篇
Swift之struct二进制大小分析
作者:京东零售 邓立兵 随着Swift的日渐成熟和给开发过程带来的便利性及安全性,京喜App中的原生业务模块和基础模块使用Swift开发占比逐渐增高。本次讨论的是struct对比Class的一些优劣势,重点分析对包体积带来的影响及规避措施。 一、基础知识 1、类型对比 引用类型:将一个对象赋值给另一个对象时,系统不会对此对象进行拷贝,而会将指向这个对象的指针赋值给另一个对象,当修改其中一个对象的值时,另一个对象的值会随之改变。【Class】 值类型:将一个对象赋值给另一个对象时,会对此对象进行拷贝,复制出一份副本给另一个对象,在修改其中一个对象的值时,不影响另外一个对象。【structs、Tuples、enums】。Swift中的【Array, String, and Dictionary】 两者的区别可以查阅Apple官方文档 2、Swift中struct和Class区别 1、class是引用类型、struct是值类型 2、类允许被继承,结构体不允许被继承 3、类中的每一个成员变量都必须被初始化,否则编译器会报错,而结构体不需要,编译器会自动帮我们生成init函数,给变量赋一个默...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案