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
英文地址,請注明出處:http://en.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;我們稱這個…