golang项目基于gorm框架从postgre数据库迁移到达梦数据库的实践

一、安装达梦数据库
1、登录达梦数据库官网,下载对应系统版本的安装包。
2、下载地址为:https://www.dameng.com/list_103.html
3、达梦数据库对大小写敏感,在安装初始化数据库实例时建议忽略大小写;具体安装教程可参考以下博客:
https://blog.csdn.net/weixin_64811434/article/details/135396955
【字符串比较大小写敏感】, 默认值为“勾选”,记得取消
初始化数据库记得参考这
二、将Postgre数据库的数据迁移到达梦数据库
通过达梦数据自带的DTS工具迁移,工具存放在 DM 数据库安装目录下 tool 文件夹下面,启动后配置即可,具体操作可以参考以下资料:
https://www.modb.pro/db/587663
三、在项目中引入相关依赖和驱动
1、在网上发现了一个封装好的基于gorm实现的驱动,很好用,参考资料为:
https://toscode.mulanos.cn/iTiki/gorm-dameng/tree/main
四、修改项目中的部分代码
1、参考上述资料修改数据库的连接方式
2、如果项目中引入了casbin中间件,则需要将以下代码:

psqldb, _ := beego.AppConfig.String("psqldb")dataSource := fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s sslmode=disable TimeZone=Asia/Shanghai",psqladdr,psqlport,psqluser,psqldb,psqlpass,)a, _ := gormadapter.NewAdapter("postgres", dataSource, true)e, err := casbin.NewEnforcer("initialize/casbin/model.conf", a)

改为如下:

url := dm.BuildUrl(psqluser, psqlpass, psqladdr, psqlport, nil)db, err := gorm.Open(dm.Open(url), &gorm.Config{})if err != nil {panic(err)}a, _ := gormadapter.NewAdapterByDBUseTableName(db, "casbin", "rule")

3、启动项目,登陆访问,如果出现错误,一般是达梦SQL关键字转为大写导致,例如,本项目中改了
原语句:

sql := `select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query, m.visible, m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_atfrom sys_menu m where m.menu_type in ('M', 'C') and m.status = '0'order by m.parent_id, m.order_num`

修改后的语句为:

sql := `select distinct m.menu_id, m.parent_id, m.menu_name, m.path AS "path", m.component, m.query AS "query", m.visible AS "visible", m.status, COALESCE(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_atfrom sys_menu m where m.menu_type in ('M', 'C') and m.status = '0'order by m.parent_id, m.order_num`

以上就是我迁移到达梦数据库的相关实践和注意事项,欢迎大家指正。

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

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

相关文章

php中闭包(Closure)的bindTo函数用法

Closure::bindTo 是 PHP 中的一个方法,用于改变闭包(Closure)内部的 $this 上下文以及其静态范围。这意味着你可以将一个闭包从一个对象或类绑定到另一个对象或类上,使其在调用时使用新的上下文。这对于在不同的对象实例间复用闭包…

C++02 变量和基本类型

基本类型 字、字节、bit、Byte之间的关系 字 word 字节 Byte 位 bit 1字 2字节 <---> 1word 2Byte 1字节 8位 <---> 1Byte 8bit 1Byte 8bits 1KB 1024Bytes 1MB 1024KB 1GB 1024MB #include <iostream> using namespace std; int main() {/*字符…

Brand Finance Retail 100 2024

近日,全球领先的品牌价值评估咨询机构Brand Finance发布了其年度行业研究报告——《Brand Finance Retail 100 2024》。该报告深入分析了全球最有价值的零售品牌及其品牌实力,揭示了品牌价值的变化趋势和品牌强度的排名情况。报告指出,尽管许多顶级零售品牌在品牌价值上遭遇了下…

deepspeed docker集群实现多机多卡训练----问题记录及解决方案资源汇总

. Docker中实现Deepspeed多机多卡训练 【掘金-雨田君的记事本】docker容器中deepspeed多机多卡集群分布式训练大模型 . 问题记录及解决方案资源汇总 问题1&#xff1a;deepspeed socketStartConnect: Connect to 172.18.0.3<54379> failed : Software caused connectio…

表达式求值的相关语法知识(C语言)

目录 整型提升 整型提升的意义 整型提升规则 整型提升实例 算术转换 赋值转换 操作符的属性 C语言的语法并不能保证表达式的执行路径唯一&#xff01;&#xff01;&#xff01; 问题表达式 整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这…

Cesium 坐标转换

屏幕坐标、固定坐标、惯性坐标转换 Cesium版本1.118.2 //屏幕坐标转固定坐标 let position viewer.scene.pickPosition(movement.endPosition) //当前时间 const now viewer.clock.currentTime //固定系坐标 const pointInFixed position //转换阵 const fixedToIcrf C…

Linux kernel启动initramfs

制作文件系统 用busybox制作文件系统&#xff0c;过程忽略。制作完成后进入rootfs目录&#xff0c;执行&#xff1a; ln -s /bin/busybox init 配置内核 打开配置菜单&#xff0c;这里只需要配置两个配置项&#xff1a; General setup–>选择 Initial RAM filesystem and…

昇思25天学习打卡营第8天 | 保存与加载 使用静态图加速

保存与加载 在训练网络模型的过程中&#xff0c;实际上我们希望保存中间和最后的结果&#xff0c;用于微调&#xff08;fine-tune&#xff09;和后续的模型推理与部署&#xff0c;下面是介绍如何保存与加载模型。 先定义一个模型用&#xff1a; import numpy as np import m…

每个 Node.js 开发人员都应该知道的13个库(上)

1. Sequelize Sequelize是一个基于promise的Node.js对象关系映射器&#xff08;ORM&#xff09;&#xff0c;它使开发人员更容易使用关系数据库。 支持PostgreSQL&#xff0c;MySQL&#xff0c;MariaDB&#xff0c;SQLite和更多数据库。 Sequelize使用JavaScript对象对数据库…

@PathVariable注解的使用及源码解析

前言 PathVariable 注解是我们进行JavaEE开发&#xff0c;最常见的几个注解之一&#xff0c;这篇博文我们以案例和源码相结合&#xff0c;帮助大家更好的了解PathVariable 注解 使用案例 1.获取 URL 上的值 RequestMapping("/id/{id}") public Object getId(Path…

【5000论文】基于大数据的电影数据可视化系统设计与实现论文分享

论文框架免费分享&#xff0c;代码收费&#xff0c;有需要可以联系我&#xff5e; 基于大数据的电影数据可视化系统设计与实现 摘要&#xff1a;本论文深入探讨了基于大数据的电影数据可视化系统的设计与实现。在电影产业数字化进程加速、数据量急剧增长的背景下&#xff0c;…

如何学习Vue?

要学习Vue&#xff0c;可以按照以下步骤&#xff1a; 熟悉HTML、CSS和JavaScript的基础知识。Vue是一个JavaScript框架&#xff0c;所以了解JavaScript的基础知识是必要的。 了解Vue的基本概念和语法。可以通过阅读Vue的官方文档来学习Vue的相关知识。Vue的官方文档提供了详细…

【Python机器学习】单变量非线性变换

添加特征的平方或立方可以改进线性回归模型&#xff0c;其他变换通常也对变换某些特征有用&#xff0c;特别是应用数学函数&#xff0c;比如log、exp、sin等。虽然基于树的模型只关注特征的顺序&#xff0c;但是线性模型和神经网络依赖于每个特征的尺度和分布。如果在特征和目标…

JAVA实现PDF转HTML文档

本文是将PDF文档转PNG图片,然后进行图片拼接&#xff0c;拼接后的图片转为base64字符串&#xff0c;然后拼接html文档&#xff08;再写入html文件&#xff09;。 引入maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency&g…

首次线下联合亮相!灵途科技携手AEye、ATI亮相2024 EAC 易贸汽车产业大会

6月22日&#xff0c;2024 EAC 易贸汽车产业大会在苏州国际博览中心圆满落幕&#xff0c;泛自动驾驶领域光电感知专家灵途科技携手自适应高性能激光雷达解决方案全球领导者AEye公司&#xff08;NASDAQ:LIDR&#xff09;及光电器件规模化量产巨头Accelight Technologies&#xff…

【单片机开发--使用循环缓冲区接受can数据帧,读写数据到内存】

双指针读写数组需要考虑的问题 使用双指针循环读写数值可能会遇到的问题&#xff1a; 初始值&#xff0c;边界值问题。 topbottom0 top往后移使用top ( top moveSize ) % buffSize bottom往后移使用bottom ( bottom moveSize ) % buffSize。 top指向的位置没有数据&…

第十七站:Java钛金——高性能计算的坚固基石

Java NIO&#xff1a;非阻塞式I/O的革命 Java NIO&#xff0c;全称为New Input/Output&#xff0c;是Java平台对传统阻塞式I/O模型的一次重大革新。NIO引入了Channel和Buffer的概念&#xff0c;允许程序在不等待I/O操作完成的情况下继续执行其他任务&#xff0c;从而极大地提升…

量块检定校准中,如何调整好校准所需的温度条件?

量块是计量中常用的标准件&#xff0c;在日常使用中可以作为各类仪器校准中的辅助工具&#xff0c;而量块自身如果进行检定校准&#xff0c;其校准过程中温度的条件就是需要多次进行调控&#xff0c;因为量块的校准需要在恒温环境下进行&#xff0c;量块的精确度和实验室环境的…

触摸屏与罗克韦尔AB PLC之间 ModbusTCP/IP无线以太网通讯实例

在实际系统中&#xff0c;同一个车间里分布多台PLC&#xff0c;通过触摸屏人机界面集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大耽误工期&#xff0c;这种情况下比较适合采用无线通信方式。本方案以组态…

虚拟机查看端口占用情况

ps -aux | grep 8888 ps aux | grep 8888命令用于查找并显示所有包含字符串"8888"的进程。具体来说&#xff1a; ps命令用于列出当前系统上的进程。 aux选项是常见的用法&#xff0c;它显示所有用户的所有进程&#xff0c;并显示详细的进程信息。 | grep 8888将ps命令…