数据库
文章平均质量分 93
DarkAthena
资深ORACLE应用及数据库设计开发咨询师、ACDU成员、墨天轮技术专家
展开
-
从pg_depend和pg_class开始了解MogDB/openGauss/postgresql的系统元数据设计
学习任何一种数据库,必须要了解它的数据字典,这样有利于了解数据库的结构、解读部分日志、定位一些问题。PG/OG系数据库的系统元数据遵从一个统一的设计规则,可以让初学者快速入门。本文以MogDB为例,剖析一下PG/OG系数据库的系统元数据设计哲学。一、pg_depend先来看pg_depend的表结构名称类型引用描述classidoid有依赖对象所在系统表的OID。objidoid任意OID属性指定的依赖对象的OID。原创 2024-11-06 12:51:28 · 993 阅读 · 0 评论 -
【ORACLE】对Oracle中char类型的研究分析
在国产数据库做ORACLE兼容性实现时,无可避免会遇到CHAR类型的差异,但是对于大多数的应用开发者来说,并不会深入去了解char类型的机制。很多开发者之前在ORACLE上就没弄懂,好不容易写出来的SQL在ORACLE能查到想要的东西了,但是一迁移到国产库的时候,发现相同的SQL,查询结果不一样了,可能是查到的数据变多了,也可能是查到的数据变少了,甚至排序结果都出现了不一致。虽然,在ORACLE官方文档中,就有这个字符串比较的说明但是空对着规则看,没有实际的场景,想象不到实际的复杂度。原创 2024-11-02 01:06:10 · 872 阅读 · 0 评论 -
【MogDB】MogDB5.2.0重磅发布第九篇-SQL宽容性提升
在ORACLE迁移到国产库的过程中,经常会遇到一些由于原本SQL不是太标准而导致在国产库上报错。这种错误,如果只有一个两个,手动改了就好了,但是如果如果要改的量非常大,还不能批量替换,而且不能根据数据库的报错信息直接判断出原因,就很是难受,浑身蚂蚁在爬一样,需要反复投入大量人力干一些没技术含量的活。因此MogDB考虑把项目中遇到的这些点,在数据库内核里全给支持了,使SQL的宽容度得到极大提升。原创 2024-11-02 00:51:16 · 550 阅读 · 0 评论 -
【MogDB】MogDB5.2.0重磅发布第六篇-支持自定义复杂对象类型
在期货行业的ORACLE数据库中,经常可以看到有大量的自定义复杂对象类型,类似以下代码beginreturn;end;beginend;end;end;beginend;beginend;end;而openGauss并不支持创建这种对象,只能支持不带type body的复合类型。截止到20240930的openGauss 6.0版本发布,也仍旧不支持(不过从2024年10月14号起,openGauss源码中已经有部分支持了)。原创 2024-11-02 00:43:46 · 975 阅读 · 0 评论 -
【openGauss】OPENGAUSS/POSTGRESQL 中float类型到int类型的隐式转换
则会发现oracle和openGauss中同样返回了2,这个时候就会猜想是不是这个float类型在两个数据库中实现并不一样导致的,因为ORACLE的float是按number格式存储的,不是标准定义中的浮点类型,而是一种精确类型;于是我们回到最初的猜想,这个问题仍然与不精确的浮点类型有关,其实ORACLE也有这种浮点类型,叫binary_float和binary_double,这两个类型不能在sql中使用,只能在plsql中使用,我们写个简单的例子在ORACLE进行测试。原创 2024-10-19 17:02:45 · 805 阅读 · 0 评论 -
【MogDB】MogDB5.2.0重磅发布第三篇-支持astore下的rowid
PG/OG系最佳的rowid实现方案,在astore下必然无法实现,所以OG系的ustore应该是当下最佳实现方案,但ustore仍然还需要一段时间来进行市场验证。因此MogDB5.2.0在astore下实现的这个rowid,在一众PG/OG系的解决方案里,属于是一种全新的方案了,这种方案不仅没有让DML性能下降,又可以比同样DML性能没有下降的其他数据库支持更多的场景,是PG/OG系中已知的目前唯一一款在astore下没有新增物理字段又同时支持了这5个rowid使用场景的数据库。原创 2024-10-19 01:09:47 · 950 阅读 · 0 评论 -
【MogDB】MogDB5.2.0重磅发布第四篇-支持windows版gsql,兼容sqlplus/sqlldr语法
本文所列出的功能,在windows上的sqlplus和gsql、sqlldr和gs_loader的最终执行效果几乎完全一致。甚至如果本地没有sqlplus/sqlldr,把gsql.exe/gs_loader.exe改成sqlplus.exe/sqlldr.exe,批处理的脚本几乎不用改,可以把MogDB当成ORACLE去执行这些脚本。当然,其实也可以看到,有一些运维常用命令在这个版本中的gsql并没有支持,比如exit退出客户端,conn的完整指令connectexecute的缩写exec。原创 2024-10-19 00:05:19 · 1096 阅读 · 0 评论 -
【MogDB】图形化开发工具Mogeaver使用方法看这一篇就够了
Mogeaver [moˈgi:və® ] 基于流行的开源图形化工具DBeaver,在严格遵循DBeaver Community Edition 的ASL开源协议基础上,进行了二次开发和封装,支持对于MogDB数据库的图形化开发及管理,支持通过图形化的方式创建,修改,调试数据库内的存储过程,自定义函数,及包。SQL编辑器包含脚本面板、工具栏和结果面板。提示:您可以按Alt+Enter或右键单击并导航到首选项来打开SQL编辑器首选项。原创 2024-10-17 17:02:07 · 1017 阅读 · 0 评论 -
【MogDB】MogDB5.2.0重磅发布第二篇-发布了哪些介质,如何获取?
有不少小伙伴在问:这次改动这么大,周边的这些工具是不是也会要一起更新?没错,伴随MogDB 5.2.0的发布,MogDB的生态工具也进行了一系列的更新,本文附上对应配套工具的版本号及下载地址。原创 2024-10-09 12:14:25 · 552 阅读 · 0 评论 -
【MogDB】MogDB5.2.0重磅发布第一篇-从参数和数据字典的变化来看引入了哪些新特性
MogDB 5.2.0版本于9月30号发布,该版本继承MogDB5.0版本的所有特性,并且在ORACLE兼容性上进行了非常大的提升,官方说法是新增了九十多项兼容性,但作为整个版本的全程亲历者,我知道新增的远远不止九十多项,因为有些小功能合并成了一个大功能,还有一些点当成是对已有功能的优化没算进来。如果全部打散成一个个小的功能点,应该是超过两百项的!原创 2024-10-07 21:18:44 · 971 阅读 · 0 评论 -
【openGauss/MogDB】SQLCODE竟然不是数值类型?
在openGauss/MogDB中,有一条这样的规则兼容O模式下,SQLCODE等于SQLSTATE原生PG中,SQLCODE是整型数值,SQLSTATE是5字符的字符串;ORACLE中的SQLCODE也是数值类型。于是之前基于ORACLE或者基于PG的应用程序,在迁移到openGauss/MogDB后,如果使用数值型变量接收sqlcode,或者对sqlcode进行数值大小判断时,都会可能出现类似这样的报错。原创 2024-07-18 23:17:01 · 711 阅读 · 0 评论 -
【openGauss/MogDB】一种对数据库的列表型参数进行设置的方式
end;end;原创 2024-07-13 16:11:18 · 420 阅读 · 0 评论 -
【MogDB】解读MogDB5.0.6版本中有关兼容性的一些更新
MogDB于2024-03-30发布了其5.0版本的补丁版本—5.0.6,其在MogDB 5.0.5的基础上新增部分特性并修复了部分缺陷,具体内容可参考官方文档# MogDB 5.0.6发布说明相信有一些伙伴和我一样对兼容性的部分感兴趣,因此本篇就针对本次更新的一些涉及到有关兼容性的东西,大概说说其实补丁版本中一般也不会增加多少内容,从本文列举的这些兼容性点上来看,很多都是很细小的变动。原创 2024-03-31 19:00:36 · 1070 阅读 · 0 评论 -
【MogDB】实战MogDB数据库适配Halo博客系统1.6版本(基于springframework+hibernate+HikariPool)
前一篇文章说了MogDB适配Halo,【MogDB】将流行的博客系统Halo后端的数据库设置为MogDB,但是适配的是2.x版本,由于2.x版本已经引入了对postgresql的支持,而MogDB对于postgresql有很好的兼容性,因此适配起来很简单。但是由于halo2.x的版本进行了全部的重构,从1.6版本并不能无痛升到2.x版本,所以仍有很多用户在使用1.6版本。原创 2024-03-06 23:01:24 · 1126 阅读 · 0 评论 -
恼人的“龙天“(䶮)--谈谈从GBK转到GB18030的特殊情况
这个字的外形是 ,上面是“龙”,下面是“天”。其实正常的输入法是可以输入这个外形的字的,但是,实际上你用输入法输入的这个字,并不是我上面提到的这个字,它们只是外形完全一样的“两个字”原创 2024-01-12 18:58:23 · 2069 阅读 · 0 评论 -
【openGauss】如何通过pg_trigger.tgtype获取触发器的各种触发条件
最近有客户反馈兼容的dba_triggers视图中,同一个触发器的trigger_event被拆成了多行,和ORACLE中表现不一致,于是我进行了一些分析,发现是在其引用的information_schema.triggers视图中就已经拆开成了INSERT/DELETE/UPDATE,但是这些属性都是通过tgtype这一个int2整型的字段获取的,甚至连before/after/instead of/row/statement 等都是通过这一个字段。原创 2023-12-02 01:53:30 · 455 阅读 · 0 评论 -
【openGauss】带有out参数的存储过程及自定义函数的重载测试
对于openGauss一、以下两条不会由于重载选项的差异发生行为改变1.使用ORACLE风格语法的procedure和function,创建规则和ORACLE一致,同名对象直接覆盖2.使用PG风格的FUNCTION,支持入参不一致的重载创建;对于入参一致,仅出参有差异的,会直接覆盖(如果return类型变化,创建会报错)二、重载选项会控制package中的procedure能否创建仅出参不一致的重载,关闭选项时,重载规则为仅入参不匹配;开启选项时,重载规则为任意参数不匹配。原创 2023-07-31 13:50:56 · 329 阅读 · 0 评论 -
【openGauss】从“functions in index expression must be marked IMMUTABLE“谈起
函数索引无论在哪个数据库中,都不是推荐用法原创 2023-07-11 23:24:50 · 1038 阅读 · 0 评论 -
【ORACLE】一条看不出会删哪个表的delete语句
最近遇上一条ORACLE里的SQL,以我十多年的复杂SQL编写经验,我竟然一时半会无法用SQL语法解析出这条SQL的语义,而且这个SQL竟然是可能可以执行成功的!原创 2023-06-04 01:05:00 · 848 阅读 · 0 评论 -
【openGauss】如何将数据库中的自定义复合类型绑定到java的class中
某客户,将应用的数据库从oracle迁移到openGauss系,源库中使用了大量的自定义type,所以java代码里也有很多对type对象的处理。在oracle中可以直接传对象给数据库,但是openGauss/postgresql的源码用例中,都是通过PGobject.setValue,把对象中的所有值拼成一个字符串,用逗号分隔,用括号括起来。如果对象中的某个值可能存在有逗号,那么就会出现异常。我以前没正经写过java,只能看懂个大概意思,当然,依葫芦画瓢也没啥问题。原创 2023-05-22 00:38:47 · 499 阅读 · 2 评论 -
【ORACLE】极速通关Oracle23c开发者免费版连接
oracle23c开发者免费版已经于2023年4月4日(北京时间)推出,并且官方也公布了安装介质的下载地址,有RPM安装包、VM虚拟机、docker镜像(下载链接见文末)。由于最近工作比较忙,暂时无法写一篇内容丰富的测试,所以先提供一个最快速体验的方法,省去对于开发者而言,繁琐的安装步骤。(docker环境部署略,实测windows docker也能启动)原创 2023-04-05 14:33:44 · 558 阅读 · 0 评论 -
【openGauss】把应用开发中的设置客户端字符编码往细了说
早前写过两篇有关Oracle字符集的文章基本说明了 ”数据字符编码“、”客户端字符编码“、”数据库字符编码“三者的关系,这些关系,对于openGauss/MogDB/postgresql其实是一样的,即”数据字符编码“和”客户端字符编码“应保持一致,且对应的字符集为”数据库字符集“的”子集原创 2023-02-01 20:08:57 · 1446 阅读 · 0 评论 -
【openGauss】一键编译openGauss3.1+dolphin,体验新增的mysql兼容特性
前两天写了一篇openGauss3.1关于mysql的相关特性,但由于openGauss官网提供下载的版本还是9月30号第一次发布的版本,很多特性都还没合入,于是我整理了2个脚本,实现真正的一键式编译并自动安装及启动数据库原创 2022-12-25 14:20:37 · 1010 阅读 · 8 评论 -
【openGauss】浅试openGauss3.1.0中有关mysql兼容的部分特性
在9月30号,openGauss推出了3.1.0这一预览版。这个版本增加了不少新内容,但让我最感兴趣的是其中关于mysql兼容的部分原创 2022-12-23 22:56:39 · 2885 阅读 · 0 评论 -
【openGauss】在WPS表格里制作连接到openGauss的实时刷新报表
其实我的数据库启蒙,是在一家甲方公司。当时一进这家公司,就见到了通过连接数据库自动刷新的excel表。而我们的国产数据库,是不是也可以通过这种方式制作报表呢?原创 2022-11-20 00:56:49 · 681 阅读 · 3 评论 -
【ORACLE】谈一谈NVARCHAR2、NCHAR、NCLOB等数据类型和国家字符集
一直以来,很多用过ORACLE数据库的开发人员,都知道在ORACLE中,字符类型可以为varchar2,也可以为nvarchar2,但是很多人都不知道这两种类型有什么区别,同样还有char/nchar,clob/nclob这些,所以今天来谈谈我对这些数据类型的理解。原创 2022-10-23 23:13:52 · 5623 阅读 · 1 评论 -
【openGauss】让gsql和sqlplus输出包含有SQL及数据的完全一致的文本文件
其实写段Java或者python就可以输出格式完全相同的查询结果了,但这些开发语言都有环境依赖,且对于运维DBA这一特定角色,可能不是太愿意用这些语言来编写代码。所以,希望能从gsql和sqlplus获得完全一致的文本输出,这样就能用文本差异对比工具对输出的文本文件进行快速比对原创 2022-10-21 15:52:43 · 1088 阅读 · 0 评论 -
【ORACLE】Oracle里有“time”数据类型吗?--关于对Oracle数据类型的一点研究
Oracle里有“time”数据类型吗?绝大多数熟悉oracle的人都会说没有,但事实就是如此么?下面这个图一定会让不少人大跌眼镜原创 2022-06-18 23:01:57 · 1458 阅读 · 0 评论 -
【openGauss】使用Oracle VM VirtualBOX安装openEuler操作系统并手动安装MogDB主备
前言本文参考MogDB官方安装文档中的“手动安装”https://docs.mogdb.io/zh/mogdb/v3.0/manual-installation,使用Oracle VM VirtualBOX虚拟机软件,安装两台openEuler操作系统的虚拟机,并安装MogDB一主一备环境先说我遇到的坑在虚拟机硬件配置中,默认是1个cpu,操作系统是可以安装成功的,也可以正常启动,但是启动数据库时会报错,设置2个cpu后就没有报错了(我反复安装了七八次操作系统,还更换了镜像版本,使用同样的安装流原创 2022-05-19 02:27:50 · 1008 阅读 · 0 评论 -
【openGauss】谈一谈openGauss对Oracle中lob类型的兼容情况
Oracle中的lob在Oracle数据库中,有blob和clob这两种较为特殊的数据类型,之所以特殊,是因为这两个类型中能存储大量的数据,最高可达4GB,因此比较适合用来存文件,其中blob用于存储二进制数据,而clob用于存储纯文本数据。另外,如果表里有字段是这两种类型,那么这些类型的数据也会有个单独的存储扩展段。而表内这两列实际存储的是“LOB locator”,即LOB定位器,相当于一个索引值,可以根据这个值在另外的存储扩展段里找到实际的lob数据。也是由于存储是分开的,所以对这两种字段的操作原创 2022-05-14 23:19:49 · 1261 阅读 · 0 评论 -
【openGauss】用plpgsql实现sha256算法(踩坑填坑实录)
前言在开发中,经常会使用类似MD5/ SHA-1/ SHA-2这样的hash算法来对数据进行处理,以防原始信息泄露,比如密码的存储。SHA-2中的SHA256,安全性比MD5更高,因此很多数据库增加了对SHA256计算的支持。比如从oracle12c起,数据库内原生提供了DBMS_CRYPTO包和STANDARD_HASH函数,可以用来进行sha256计算。在postgresql中,可以通过安装pgcrypto扩展来支持,安装命令也很简单。sqlcreate extension pgcrypto;原创 2022-04-27 20:25:59 · 2202 阅读 · 0 评论 -
【ORACLE】谈一谈分析函数(窗口函数)的前世今生-那些可能不为人知的事
一、前言经常写报表sql的小伙伴,应该都知道"分析函数"这一强大的功能,常见用法比如 取分组TOP-N、滚动求和、取当前行的上(下)N行等等。不过本篇不会再对这些常见基础用法进行介绍,只会说说那些关于"分析函数"可能不被人注意的事。二、最早使用分析函数的数据库有文章里说过,分析函数最早是在ORACLE8.1.6中出现的,我翻了下8.1.6和8.0的文档,发现的确如此(8.1.5版本文档已被移除,暂无法确认)而ORACLE8.1.6是在1999年11月发布的,因此早在二十多年前(此文创作日期为2022原创 2022-03-24 02:53:03 · 1047 阅读 · 1 评论 -
【ORACLE】详解oracle数据库UTL_ENCODE包各个函数的模拟算法
前言在前后端交互的开发中,经常会遇到需要将一些二进制数据,比如图片文件,编码成可打印的ascii字符进行传递;又者,开发人员不希望数据在传递中明文显示传递的文本内容,并且有些字符不是ascii字符,无法很好的兼容各种环境。所以这就涉及到了各种编码的转换。虽然目前各种开发语言均可处理此类编码,但的确是存在一些场景需要在数据库中对数据直接进行编解码的操作。比如应用直接将编码后的数据存到了数据库,但如果直接在数据库去进行查找时,发现编码后的数据无法读,无法写出想要的数据的检索条件。在oracle数据库中,有原创 2022-03-15 21:47:58 · 2488 阅读 · 1 评论 -
【ORACLE】详解oracle数据库UTL_RAW包各个函数的模拟算法
前言这篇文章可能是你至今(2022-02-11)能在互联网看到的,关于utl_raw包的逻辑说得最深入的一篇文章了。由于最近在复刻oracle中自带的包到其他数据库,因此需要对oracle中的包的逻辑进行解析。比如UTL_RAW这个包,以前用得挺多,但没深究其函数逻辑,这次仔细分析,发现了有一些函数涉及到了一些计算机基本原理及IEEE标准,比较有意思,因此写一篇这样的文章来分享。函数清单先上官方文档 UTL_RAW再贴个函数清单,稍微翻译了下,方便理解|Subprogram|Descripti原创 2022-02-11 18:44:04 · 4579 阅读 · 0 评论 -
【openGauss】谈谈openGauss中的raw类型
前言在oracle数据库上进行开发的时候,经常会使用到raw类型,raw其实就是一段十六进制形式的二进制数据,最长长度和varchar2一致,都是32767个字节。在各种数据加解密或者数据传输时,使用二进制数据可以避免字符集异常或者特殊符号引起的程序运行错误。在postgresql(截止到当前最新的14版本)中,没有raw类型,只能使用text或者bytea转换来处理,所以这个点可能会让迁移项目变得很头疼。最近在写openGauss的兼容plsql包,正好写到了utl_raw,一开始我是完全按照pos原创 2022-02-07 03:37:37 · 1345 阅读 · 0 评论 -
【openGauss】我用plsql给openGauss手搓了一个UTL_URL包
前言最近开始啃openGauss的兼容package了,先拿简单点的练练手。UTL_URL这个包只有两个函数,"ESCAPE"和"UNESCAPE",其实就是在其他开发语言中使用的URLENCODE和URLDECODE两个函数,主要用于对url字符串的一些特定字符进行处理,以便将url字符串作为数据传输时不引起歧义,还算是经常会用到的功能,目前已经有三方扩展支持这两个函数(https://github.com/okbob/url_encode),但是在openGauss里编译扩展有点不方便,我直接用pl原创 2022-02-02 22:48:49 · 1994 阅读 · 0 评论 -
【ORACLE】谈一谈Oracle数据库使用的字符集,不仅仅是乱码
一、前言先看一个比较有意思的案例上面这个sql,查询了a和b两个字段,均为"张三"两个汉字,并且使用length函数检查,长度均为2。但是,当你看到下面这几个sql的输出结果时,很有可能第一反应是:"这特喵的怎么可能?"其实,你所看到的两个"张三",的确长得是一模一样,用显微镜去看也不可能看到区别。但为什么a和b不相等呢?这是因为组成他们的成分不一样,这个成分就是 字符集二、什么是字符集?百度百科简单来说,字符(Character)是各种文字和符号的总称,包括各国家文字、标原创 2022-01-23 23:52:11 · 3838 阅读 · 0 评论 -
【ORACLE】21c版本中分析函数的加强(window、exclude、groups)
前言在21c版本中,分析窗口得到了增强,支持了WINDOW子句,并且在窗口中增加支持EXCLUDE及GROUPS。以下以HR Schema Demo为例,可以在墨天轮在线实训环境进行验证Oracle 21c 实训环境1.window在21c之前,如果我们要对同一个窗口进行多次统计分析,一般是像下面这么写sqlselect EMPLOYEE_ID, FIRST_NAME, LAST_NAME, salary, sum(salary) ove原创 2022-01-19 14:35:59 · 745 阅读 · 0 评论 -
【openGauss】谈一谈PostgreSQL及openGauss中的package
一、前言经常在oracle中写plsql的应该都知道,oracle中使用package不仅仅是把多个函数或者过程整合到一起,它还具有一些其他的优点,比如1. 可以定义私有化函数、过程、type、type数组、变量等,让其只能被包内的函数调用2. 可以在不同的package内使用同名的函数、过程、type、type数组、变量等3. 在调试代码时,不需要跳转很多对象4. 把package的ddl文本中的包名进行修改,即可创建一个内部代码完全相同但名字不同的包,无需去修改内部其他函数或过程的名称,方便进原创 2022-01-18 20:58:14 · 2967 阅读 · 0 评论 -
【ORACLE】个人开发PIVOT增强包-解决原生PIVOT在不使用XML时无法in子查询的问题
pivot_ext_pkg-oracle项目地址:https://github.com/Dark-Athena/pivot_ext_pkg-oracle背景众所周知,oracle的原生pivot功能,无法在"for ... in ()" 的括号中使用子查询(不使用xml的情况下),比如,如果执行sqlselect * from HR.COUNTRIESpivot(MAX(COUNTRY_NAME) for COUNTRY_ID in (select distinct COUNTRY原创 2021-12-25 16:54:30 · 2508 阅读 · 0 评论