Oracle DB和PostgreSQL,OpenGauss主外键一致性的区别

针对于unique索引在主外键上的表现,o和PG的行为确实不一致,测试样例:

PG:

测试1:

test=#  CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL,  globalid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  type SMALLINT NOT NULL,  name VARCHAR(255) NOT NULL,  defaulttool VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  datasetguid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  subtype INTEGER NULL,   description VARCHAR(1024) NULL,   tags VARCHAR(2000) NULL,  visible SMALLINT NOT NULL,  hash VARCHAR(64) NOT NULL,  useridentity VARCHAR(255) NULL,  status INTEGER NULL);
CREATE TABLECREATE UNIQUE INDEX EdTemplates_Globalid_idx ON gdb_editingtemplates (globalid );
CREATE INDEXCREATE TABLE gdb_editingtemplaterelationships ( objectid INTEGER NOT NULL,  type SMALLINT NOT NULL,  originid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  destid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL);
CREATE TABLE
test=# ALTER TABLE GDB_EditingTemplateRelationships ADD CONSTRAINT EdTemplateRlships_OriginID_fk FOREIGN KEY (originid) REFERENCES GDB_EditingTemplates (globalid);
ALTER TABLE
test=# select version();version
---------------------------------------------------------------------------------------------------------PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 行记录)
test=# drop table gdb_editingtemplaterelationships;
DROP TABLE
test=# drop table gdb_editingtemplates;
DROP TABLE
test=#  CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL,  globalid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  type SMALLINT NOT NULL,  name VARCHAR(255) NOT NULL,  defaulttool VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  datasetguid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  subtype INTEGER NULL,   description VARCHAR(1024) NULL,   tags VARCHAR(2000) NULL,  visible SMALLINT NOT NULL,  hash VARCHAR(64) NOT NULL,  useridentity VARCHAR(255) NULL,  status INTEGER NULL);
CREATE TABLE
test=# alter table gdb_editingtemplates add constraint gdb_editingtemplates_global_uniq unique(globalid);
ALTER TABLE
test=# CREATE TABLE gdb_editingtemplaterelationships ( objectid INTEGER NOT NULL,  type SMALLINT NOT NULL,  originid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  destid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL);
CREATE TABLE
test=# ALTER TABLE GDB_EditingTemplateRelationships ADD CONSTRAINT EdTemplateRlships_OriginID_fk FOREIGN KEY (originid) REFERENCES GDB_EditingTemplates (globalid);
ALTER TABLE
test=# select version();version
---------------------------------------------------------------------------------------------------------PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 行记录)

华为GaussDB for openGauss:

test_temp=> select version();
-[ RECORD 1 ]--------------------------------------------------------------------------------------------------------------
version | gaussdb (GaussDB Kernel 503.1.0 build f53b4ed8) compiled at 2023-03-27 00:43:20 commit 5356 last mr 10743 releasetest_temp=> select * from pg_database where datname=current_database();
-[ RECORD 1 ]----+----------
datname          | test_temp
datdba           | 18389
encoding         | 0
datcollate       | C
datctype         | C
datistemplate    | f
datallowconn     | t
datconnlimit     | -1
datlastsysoid    | 12810
datfrozenxid     | 0
dattablespace    | 1663
datcompatibility | A
datacl           |
datfrozenxid64   | 14613
datminmxid       | 2
dattimezone      | PRCtest_temp=>  CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL,  globalid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  type SMALLINT NOT NULL,  name VARCHAR(255) NOT NULL,  defaulttool VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  datasetguid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  subtype INTEGER NULL,   description VARCHAR(1024) NULL,   tags VARCHAR(2000) NULL,  visible SMALLINT NOT NULL,  hash VARCHAR(64) NOT NULL,  useridentity VARCHAR(255) NULL,  status INTEGER NULL);
CREATE TABLE
test_temp=>
test_temp=> CREATE UNIQUE INDEX EdTemplates_Globalid_idx ON gdb_editingtemplates (globalid );
CREATE INDEX
test_temp=> CREATE TABLE gdb_editingtemplaterelationships ( objectid INTEGER NOT NULL,  type SMALLINT NOT NULL,  originid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  destid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL);
CREATE TABLE
test_temp=> ALTER TABLE GDB_EditingTemplateRelationships ADD CONSTRAINT EdTemplateRlships_OriginID_fk FOREIGN KEY (originid) REFERENCES GDB_EditingTemplates (globalid);
ALTER TABLE
test_temp=> drop table gdb_editingtemplaterelationships;
DROP TABLE
test_temp=> drop table gdb_editingtemplates;
DROP TABLE
test_temp=>  CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL,  globalid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  type SMALLINT NOT NULL,  name VARCHAR(255) NOT NULL,  defaulttool VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  datasetguid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  subtype INTEGER NULL,   description VARCHAR(1024) NULL,   tags VARCHAR(2000) NULL,  visible SMALLINT NOT NULL,  hash VARCHAR(64) NOT NULL,  useridentity VARCHAR(255) NULL,  status INTEGER NULL);
CREATE TABLE
test_temp=> alter table gdb_editingtemplates add constraint gdb_editingtemplates_global_uniq unique(globalid);
NOTICE:  ALTER TABLE / ADD UNIQUE will create implicit index "gdb_editingtemplates_global_uniq" for table "gdb_editingtemplates"
ALTER TABLE
test_temp=> CREATE TABLE gdb_editingtemplaterelationships ( objectid INTEGER NOT NULL,  type SMALLINT NOT NULL,  originid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  destid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL);
CREATE TABLE
test_temp=> ALTER TABLE GDB_EditingTemplateRelationships ADD CONSTRAINT EdTemplateRlships_OriginID_fk FOREIGN KEY (originid) REFERENCES GDB_EditingTemplates (globalid);
ALTER TABLE

PG和华为 gaussDB for openGauss(兼容o模式)  ,在主表的关联键上建unique索引或者unique的constraint都可以。

O:

SQL>  CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL,  globalid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  type SMALLINT NOT NULL,  name VARCHAR(255) NOT NULL,  defaulttool VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  datasetguid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NULL,  subtype INTEGER NULL,   description VARCHAR(1024) NULL,   tags VARCHAR(2000) NULL,  visible SMALLINT NOT NULL,  hash VARCHAR(64) NOT NULL,  useridentity VARCHAR(255) NULL,  status INTEGER NULL);Table created.SQL> CREATE UNIQUE INDEX EdTemplates_Globalid_idx ON gdb_editingtemplates (globalid );Index created.SQL> CREATE TABLE gdb_editingtemplaterelationships ( objectid INTEGER NOT NULL,  type SMALLINT NOT NULL,  originid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL,  destid VARCHAR(38) DEFAULT '{00000000-0000-0000-0000-000000000000}' NOT NULL);Table created.SQL> ALTER TABLE GDB_EditingTemplateRelationships ADD CONSTRAINT EdTemplateRlships_OriginID_fk FOREIGN KEY (originid) REFERENCES GDB_EditingTemplates (globalid);
ALTER TABLE GDB_EditingTemplateRelationships ADD CONSTRAINT EdTemplateRlships_OriginID_fk FOREIGN KEY (originid) REFERENCES GDB_EditingTemplates (globalid)*
ERROR at line 1:
ORA-02270: no matching unique or primary key for this column-listSQL> alter table gdb_editingtemplates add constraint gdb_editingtemplates_gid_unique unique(globalid);Table altered.SQL> ALTER TABLE GDB_EditingTemplateRelationships ADD CONSTRAINT EdTemplateRlships_OriginID_fk FOREIGN KEY (originid) REFERENCES GDB_EditingTemplates (globalid);Table altered.

在主表上的关联键上建unique索引,在建关联的时候会报错,需要建一个unique的constraint才可以,也就是说o上不认unique索引,只认constraint。

个人认为,PG的兼容性更好些。

有些国产数据厂商的兼容O模式,为了兼容Oracle,也会是这样的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89855.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06.自动化测试概念

自动化测试概念 1. 自动化1.1 回归测试1.2 自动化分类 1.3 自动化测试金字塔2. web自动化测试3.Selenium 1. 自动化 ​ **自动化测试(Automated Testing):**是指使用软件工具或脚本来自动执行测试任务,代替人工进行重复性、繁琐的…

页面登录数据的加密(前端+后端)

本加密过程使用的 AESRSA概要1.使用AES对传输数据进行加密AES为对称加密,加密和解决所需要的key是一样的,所以拦截到AES key就可以直接解密,所以需要结果RSA进行加密2.对AES的key进行RSA加密RSA为非对称加密,客户端只能获取到publicKey(公钥),而解密只能使用服务器的privateKey…

PC端基于SpringBoot架构控制无人机(一):初识无人机控制

一、无人机飞控系统的概述飞控(Flight Controller)是无人机最为核心的组成部分之一,负责实现无人机的自主飞行控制和稳定飞行。飞控系统的功能决定了无人机的飞行性能,包括飞行的稳定性、操控的响应速度、导航的精确度等。通过飞控…

QT6 源(154)模型视图架构里的列表视图 QListView:先学习属性部分,

(1)属性总图,以及测试程序的框架 : 开始属性的学习 : (2) 继续属性学习 : (3) 谢谢

MySQL——9、事务管理

事务管理 1、什么是事务?2、事务常见操作方式3、事务隔离级别4、数据库并发场景4.1、读-写4.2、RR与RC的本质区别 1、什么是事务? mysql是基于CS模式的,是一套网络服务,所以我们是可以在本地连接上远程服务器的mysql服务端的。my…

Python之面向对象详解(一篇足矣)

目录 一、初阶面向对象 1. 初识面向对象 1.1 对象和self 1.2 常见成员 1.3 应用示例 将数据封装到一个对象,便于以后使用。 将数据封装到对象中,在方法中对原始数据进行加工处理。 根据类创建多个对象,在方法中对对象中的数据进行修改…

【Qt】qml组件对象怎么传递给c++

将QML组件对象传递给C的方法 在QML和C之间传递完整的组件对象需要特殊处理&#xff0c;因为QML组件是动态创建的JavaScript对象。以下是几种有效的方法&#xff1a; 1. 使用QObject指针传递 C端设置 // MyClass.h #include <QObject> #include <QQuickItem>cla…

Java基础 集合框架 List框架

list架构 list接口list 核心特性以及扩展Collection的体现 抽象类 AbstractList抽象类 AbstractSequentialList (简化链表的顺序访问)AbstractSequentialList 核心特点自定义实现示例代码讲解其实现原理AbstractSequentialList 总结与AbstractList的对比 List 实现类 ArrayList…

2025年6月28和29日复习和预习(C++)

学习笔记大纲​一、预习部分&#xff1a;数组基础​&#xff08;一&#xff09;核心知识点​数组的创建&#xff1a;掌握一维数组的声明方式&#xff0c;如int arr[5];&#xff08;创建一个包含 5 个整数的数组&#xff09;。重点在于理解数组长度需为常量&#xff0c;且在声明…

【centos8服务如何给服务器开发3306端口】

在 CentOS 8 中开放 MySQL 默认端口 3306&#xff0c;需要配置防火墙和 SELinux。以下是详细步骤&#xff1a; 1. 开放防火墙端口&#xff08;Firewalld&#xff09; CentOS 8 默认使用 firewalld 管理防火墙&#xff0c;执行以下命令开放 3306 端口&#xff1a; # 开放 TCP 33…

python系列之:使用md5和sha256完成签名认证,调用接口

python系列之:使用md5和sha256完成签名认证,调用接口 MD5签名和sha256签名认证md5认证代码sha256认证代码拼接签名生成签名拼接url调用接口MD5签名和sha256签名认证 MD5签名认证 算法特性: 生成128位(16字节)的哈希值计算速度快已被证明存在碰撞漏洞(不同输入可能产生相同…

SpringBatch配置与入门实例

通过对SpringBatch基础概念的了解&#xff0c;参考&#xff1a;SpringBatch使用介绍 任何技术用起来之后&#xff0c;再去探究内部细节的原理&#xff0c;才会事半功倍。下面记录一下笔者在SpringBoot项目中集成SpringBatch&#xff0c;并且通过一个小的实例展示如何简单使用它…

spdlog 项目介绍与二次封装

目录 介绍 二次封装 介绍 spdlog 是C开源的第三方日志库&#xff0c;整个项目在 spdlog 命名空间中。 在 spdlog 命名空间的 level 命名空间里定义了枚举类型&#xff0c;把日志分为了 5 个等级&#xff1a;trace debug info warn err critical enum level_enum : in…

shell编程之awk命令详解

1. awk 教程 1.1 调用 awk awk 是一种强大的文本处理工具&#xff0c;在 Linux 系统中广泛应用于日志分析、数据处理等场景。调用 awk 主要有以下三种方式&#xff1a; 1.1.1 命令行方式 基本语法为&#xff1a; awk (-F filed-separator) commands input-files其中&#…

服务器需要备案吗?在哪些地区需要备案?

&#x1f3af; 服务器是否需要备案&#xff1f; 是否需要备案&#xff0c;关键看以下两个因素&#xff1a; 服务器所在地&#xff08;机房位置&#xff09; 网站面向的访问群体&#xff08;境内或境外&#xff09; &#x1f3f7; 中国大陆&#xff08;境内&#xff09;服务器…

HarmonyOS学习3---ArkUI

1、组件 1.1、基础组件 1.2、布局容器 1.3、页面导航 1.4、其他组件 2、ArkTs/C混合开发&#xff0c;高性能编码 3、布局能力&交互归一 4、实时开发预览

Java学习第十五部分——MyBatis

目录 一.概述 二.特点 三.组件 四.Mapper 五.配置文件 六.使用步骤 七.高级功能 八.优点缺点 九.项目实战 1.打开idea创建一个Java项目&#xff0c;构建系统选“Maven”​ 2.创建完成后若依赖报错&#xff0c;可通过下载或重新加载来解决​ 3.配置pom.xml文件&…

小企业如何搭建本地私有云服务器,并设置内部网络地址提供互联网访问

在数字化时代&#xff0c;很多普通公司小企业规模的&#xff0c;利用本地小型服务器或计算机搭建私有云服务器&#xff0c;不仅可以提升数据管理效率&#xff0c;还能保障业务数据的安全性和灵活性。以下是为小企业量身定制的私有云服务器搭建指南&#xff0c;及最后附无公网IP…

MySQL 八股文【持续更新ing】

MySQL 八股文【持续更新ing】 文章目录 MySQL 八股文【持续更新ing】前言一、MySQL的存储引擎有哪些&#xff1f;他们之间有什么区别&#xff1f;二、MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别&#xff1f;1.InnoDB 中的聚簇索引2.InnoDB 中的非聚簇索引 三、MySQL…

每日算法刷题Day42 7.5:leetcode前缀和3道题,用时2h

7. 3026.最大好子数组和(中等,学习) 3026. 最大好子数组和 - 力扣&#xff08;LeetCode&#xff09; 思想 1.给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个子数组中&#xff0c;第一个元素和最后一个元素 差的绝对值恰好 为 k &#xff0c;我们称这个…