人大金仓数据库(KingbaseES)使用总结
前言:
项目碰到要做国产化适配,服务器是OpenEuler,数据库是人大金仓。
金仓数据库的底层是基于PostgreSQL,官方提供的文档还是比较全,改变了我对国产化的一些软件的刻板印象,比某麟,某梦好用多了,这里记录一下使用过程踩的一些坑。
1、下载数据库和授权文件,官方地址:https://download.kingbase.com.cn/xzzx/index.htm
我们之前的数据库是从Oracle转过来的,基于Linux操作系统,所以选择的是这个:
下载授权文件,建议选择专业版,虽然只有90天,但是连接数没那么多限制,先开始用的开发版,在服务器上部署之后随便一连就提示超限,开发版只适合在本机安装使用
2、安装
(照着官方文档一步步安装即可,里面有一步设置tmp空间可参考另一篇博文:)https://www.cnblogs.com/dysjwang/p/18711645
如果服务器是Linux,客户端电脑是Windows,也可以用这个软件包来安装,安装的时候选择只安装客户端,Windows客户端长这样:
3、配置/更换授权文件
⑴、找到授权位置,一般在“/opt/Kingbase/ES/V9” 下
⑵、旧授权改名,mv license.dat license.dat_bak
⑶、新授权放到这个位置
⑷、新授权属主是kingbase chown kingbase:kingbase license.dat,给新授权添加可执行权限chmod +x license.dat
⑸、更换kingbase用户。5.1和5.2选一个执行即可
⑸.1、reload服务,到“/opt/Kingbase/ES/V9/Server/bin/”目录, 执行“./sys_ctl reload -D /opt/Kingbase/ES/V9/data”
⑸.2、restart服务,到“/opt/Kingbase/ES/V9/Server/bin/”目录,执行“./sys_ctl restart -D /opt/Kingbase/ES/V9/data/”
⑹、记得改连接数,目录“/opt/Kingbase/ES/V9/data/kingbase.conf”,修改max_connections=1000
4、创建表空间、创建数据库
它的表空间和Oracle的类似, 新建表空间和数据库和Oracle类似,使用navicat可以直接连,在连接的时候选择PostgreSQL即可,可参考我的另一篇博文:https://www.cnblogs.com/dysjwang/p/18672982
5、导数据,有坑注意
有些基础表我们用的是MySQL,也是想的太天真了,全手工操作——即从SQLYog导出脚本,然后直接在这边执行,各种报错(类型错误、关键字错误、符号错误……),然后一个个修复,终于sql脚本执行成功了,然后又个特别特别大的坑:
使用原生sql脚本有个很大的问题即双引号问题,如果内容有双引号,则导出的脚本里会做转译,重新导入的时候就不对了,而我们的数据内容又有大量这种json,于是影响基础功能了,类似下图:
后来使用REPLACE(string text, from text, to text)函数修复数据才搞定,所以还是建议大家使用官方提供的数据迁移工具来操作,https://bbs.kingbase.com.cn/docHtml?recId=d16e9a1be637c8fe4644c2c82fe16444&url=aHR0cHM6Ly9iYnMua2luZ2Jhc2UuY29tLmNuL2tpbmdiYXNlLWRvYy92OS9kZXZlbG9wbWVudC9kZXZlbG9wLXRyYW5zZmVyL2luZGV4Lmh0bWw
6、修改searchPath
show search_path;
alter database jvlei_tejian_dev set search_path = "$user", public, tejian;
select sys_reload_conf();
7、数据类型(和MySQL对比)
bigint→int8,长度64
datetime→timestamp,长度0(设置6代表秒后几位)
tinyint→bool
floag→numeric,长度10,小数点2
varchar→varchar
8、主键、绑定序列,自增长:
-- tj_log_info
select * from tj_log_info order by id desc;
SELECT conname, contype FROM pg_constraint WHERE conrelid = 'tj_log_info'::regclass AND contype = 'p';
ALTER TABLE tj_log_info ADD PRIMARY KEY (id);
select max(id) from tj_log_info;
CREATE SEQUENCE tj_log_info_seq
START WITH 14358
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE tj_log_info ALTER COLUMN id SET DEFAULT nextval('tj_log_info_seq'::regclass);
9、备份
Linux,找到安装目录,执行:
./sys_dump -Usystem -p54321 -f /home/databak/tejiabbak.sql tejian
-U:用户名
-p:端口
Windows,找到安装目录的bin下,执行:
sys_dump -Usystem -p54321 -f E:\tejiabbak.sql tejian
10、还原
Linux,找到安装目录,执行:
./ksql -Usystem -d 库名 -p54321 -f /home/xxxx/xxx.sql
Windows,找到安装目录,执行:
./ksql -Usystem -d 库名 -p54321 -f D:\xxx.sql
11、Java对接,ORM框架,使用MyBatisPlus,见另一篇博文: https://www.cnblogs.com/dysjwang/p/18720449
12、官方回复
1、是否需要设置远程访问,类似mysql的user表修改hostname
答:不需要
2、是否有类似plsql工具的单独安装程序
答:在本地下载一个windows版本,选择客户端安装,开始菜单会有数据库开发工具。
3、Java开发语言,ORM框架只有hibernate?是否可以用其mybatis
答:可以的,需要替换金仓的jdbc驱动+hibernate等方言包即可。驱动目录在安装目录Interface下。
4、数据库的模式是什么概念?各模式有什么用途?区别是什么?
答:我们的模式对应oracle的用户,创建数据库以后,如果不创建模式,直接创建表默认会在public公共模式下,建议咱们创建自己的模式。
5、扩展是什么概念?用途是什么?
答:扩展您可以认为是各种特性,比如oracle的一些dbms包的函数,需要创建对应的扩展才能使用。
6、sysmac下查询表提示无权限,见图所示
答:sysmac这个模式是系统的,只有超级管理员才有权限。
7、客户端工具是否有产品手册说明?如有提供一下地址
答:KingbaseES SQL介绍,有视频,有文档
后续有新的经验随时补充……
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?