用 JetBrains DataGrip 连接 Huawei openGauss

背景

北邮的数据库原理课程有一部分实验内容。在此前的课程中,这类课程是依托 Microsoft SQLserver 完成的。近几年,伴随着华为推广旗下的生态系统——openEuler(CentOS)、openGauss(PostgresSQL)、HarmonyOS(Android)、MindSpore(自研)以及配套的 ModelArts(Jupyter 拓展服务)、鲲鹏 CPU(fabless 自研)等等,一些华为的合作高校开始使用华为的开源方案或开源定制化方案替换原有的教学工具,北邮也不例外,切换为了 openGauss。不得不说,一如 CMU、Stanford 等学校的课程有大量一线大厂赞助,这样的校企合作确实是路线对了。

遗憾的是,相比大二时“计算机系统基础”(ICS)时用 openEuler + 鲲鹏 920 完成 CSAPP Lab 的顺畅(文档就是 ARMv8 的指令集文档打上个 Huawei 的 logo), openGauss 对 PostgresSQL 的修改导致它的文档确实略显劣质。姑且不说 API 文档混乱的格式、标点、字体之类的(或许说明 code review 不看注释和配套文档),甚至出现官方文档链接点进去发现链接失效,甚至整个文档库都被迁移而没有做重定向的搞笑情况。(相比 FaceBook/Meta 在发布 docusaurus 时的强调,或许是以华为的流量和宣传实力,不屑于做 SEO 吧§(* ̄▽ ̄*)§)

问题

几经修改的实验指导书给出了使用 DBeaver 连接的方法。但是在更好用的 DataGrip 上照用这种方式会出现身份验证只能通过无验证或 pgpass 进行,而没有需要的用户名-密码的方式,也就无处填写 user 和 password。

DataGrip 没有用户名密码选项导致无法连接 openGauss
DataGrip 没有用户名密码选项导致无法连接 openGauss

而如果直接使用 DataGrip 自带的 PostgreSQL 驱动程序,又会提示:[08004] Invalid or unsupported by client SCRAM mechanisms. 这是由于 openGauss 与 PostgreSQL 对于密码的 hash 方式不完全相同,SHA256 不兼容 PostgreSQL 的驱动。

openGauss 使用的 SHA256 不兼容 PostgreSQL 的驱动
openGauss 使用的 SHA256 不兼容 PostgreSQL 的驱动

解决方案

首先需要下载对应版本的 openGauss 驱动。以 2022 秋季学期北邮实验用的 3.1.0 版本为例,驱动在华为云的 obs 上存储。下载后打开 DataGrip(本文以安装官方中文语言包的描述为准),点击左侧“数据库资源管理器”的“+”标志,选择“驱动程序”导入新的驱动程序,再在“驱动程序文件”中将下载并解压的两个驱动程序的 .jar 包加入其中。出于兼容性考虑,一般“类”选择为“org.postgresql.Driver”。

接下来,添加一个 JDBC URL 模板,名称可以为任意(此处就叫“JDBC”),模板为:jdbc:postgresql://{host}:{port}/{database}{user}{password}

这样做是因为,DataGrip 只会要求用户填写已经在模板中出现的参数,比如 {host}{port}{database}{user}{password},它会根据模板的情况智能生成一个对应的填写表,因此,DBeaver 的模板拿过来是不能使用的。后两个参数不会出现在 URL 当中,只作为引导 DataGrip 生成填写表使用。

当然,也可以根据 PostgreSQL 兼容的方式将所需内容填写到 JDBC URL 中,这样 DataGrip 会覆盖掉表中的内容,比如:jdbc:postgresql://116.205.***.***:8000/postgres?user=userxxx&password=xxxxxx

在 DataGrip 中导入 openGauss 驱动程序文件
在 DataGrip 中导入 openGauss 驱动程序文件
成功在 DataGrip 上连接到 openGauss
成功在 DataGrip 上连接到 openGauss

发表评论