【BUG】golang gorm导入数据库报错 “unexpected type clause.Expr“

帮同事排查一个gorm导入数据报错的问题

事发现场

ck sql

CREATE TABLE ods_api.t_sms_jg_msg_callback_dis
(`app_key` String DEFAULT '' COMMENT '应用标识',`callback_type` Int32 DEFAULT 0 COMMENT '0送达,1回执',`channel` Int32 DEFAULT 0 COMMENT 'uid下发的渠道',`model` String DEFAULT '' COMMENT '设备机型',`jgid` String DEFAULT '' COMMENT '极光返回的msgid',`notification_state` Int8 DEFAULT 0 COMMENT '接收通知时通知开关是否打开',`params` String DEFAULT '' COMMENT '用户在push API推送请求的时候在payload的callback里自行指定的参数',`platform` String DEFAULT '' COMMENT '推送平台',`registration_id` String DEFAULT '' COMMENT '设备唯一标识',`alias` String DEFAULT '' COMMENT '设备registration_id对应的别名',`send_time` String DEFAULT '' COMMENT '通知的送达时间/ 用户点击通知的时间',`created_at` DateTime DEFAULT now()
)
ENGINE = ReplacingMergeTree(created_at)
PARTITION BY toDate(created_at)
ORDER BY (callback_type, jgid, registration_id, send_time)
SETTINGS index_granularity = 8192
COMMENT '极光push点击/送达回执记录表,中台notify服务用'

go 数据表

type TSmsJgMsgCallback struct {AppKey            string    `gorm:"column:app_key;default:;comment:'应用标识'" json:"appkey"`CallbackType      int32     `gorm:"column:callback_type;default:0;comment:'0送达,1回执'" json:"callback_type"`Channel           int32     `gorm:"column:channel;default:0;comment:'uid下发的渠道'" json:"channel"`Model             string    `gorm:"column:model;default:;comment:'设备机型'" json:"model"`Jgid              string    `gorm:"column:jgid;default:;comment:'极光返回的msgid'" json:"msgid"`NotificationState int8      `gorm:"column:notification_state;default:0;comment:'接收通知时通知开关是否打开'" json:"notification_state"`Params            string    `gorm:"column:params;default:;comment:'用户在push API推送请求的时候在payload的callback里自行指定的参数'" json:"params"`Platform          string    `gorm:"column:platform;default:;comment:'推送平台'" json:"platform"`RegistrationId    string    `gorm:"column:registration_id;default:;comment:'设备唯一标识'" json:"registration_id"`Alias             string    `gorm:"column:alias;default:;comment:'设备registration_id对应的别名'" json:"alias"`SendTime          string    `gorm:"column:send_time;default:;comment:'通知的送达时间/ 用户点击通知的时间'" json:"send_time"`CreatedAt         time.Time `gorm:"column:created_at"`
}func (t *TSmsJgMsgCallback) TableName() string {return "t_sms_jg_msg_callback_dis"
}

导入数据报错代码

func insertCk(callbackList []ck.TSmsJgMsgCallback) {if len(callbackList) == 0 {return}err := clickhouse.GetPushCk().Table((&ck.TSmsJgMsgCallback{}).TableName()).Create(&callbackList).Errorif err != nil {logger.Error("callbackClick insertCk err", zap.Error(err), zap.Any("callbackList", callbackList))return}

日志打印:

 INSERT INTO `t_sms_jg_msg_callback` (`callback_type`,`channel`,`notification_state`,`alias`,`send_time`,`app_key`,`model`,`jgid`,`params`,`platform`,`registration_id`) VALUES (1,1,1,'alias1','1510109259','b2d7e0fbaa7f4d7e9c2b3bc0','model1','123','{"key1":"value1","key2":"value2"}','android','1a0018970a4b4b4b4b4b4b4b4b4b4b4b')callbackClick ck insert err     {"error": "alias (String): unexpected type clause.Expr"

问题分析

从sql日志和手动执行,并无问题,只能找gorm clihouse源码debug分析为什么报类型不一致

在这里插入图片描述

可以看到,变量里jgid字段类型不为string,而是为DEFAULT?
变量类型为[]interface{} ?
在这里插入图片描述

再看gorm的定义
gorm语法写错了
在这里插入图片描述

总结

通过SQL自动生成自动代码model时,尽量用公司内部的组件或者可靠的三方工具,自己写非常容易出错

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

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

相关文章

文献速递:人工智能医学影像分割--- 深度学习分割骨盆骨骼:大规模CT数据集和基线模型

文献速递:人工智能医学影像分割— 深度学习分割骨盆骨骼:大规模CT数据集和基线模型 我们为大家带来人工智能技术在医学影像分割上的应用文献。 人工智能在医学影像分析中发挥着至关重要的作用,尤其体现在图像分割技术上。这项技术的目的是准…

Blender教程(基础)-面的细分与删除、挤出选区-07

一、Blender之面的细分 新建一个立方体,在编辑模式下、选中一个面。 在选中的面上单击右键弹出细分选项,选择细分。 在选中细分后、会默认细分1次。修改细分次数在左下角 二、Blender之面的删除 选择中需要操作的面,在英文状态下按X键弹…

51单片机通过级联74HC595实现倒计时秒表Protues仿真设计

一、设计背景 近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了51单片机通过级联74HC595实现倒计时秒表设计,倒计时精度达0.05s,解决了传统的由于倒计时精度不够造成的误差和不公平性,是各种体育竞赛的必备设…

minio2023版本安装对象存储文件迁移

一、环境 minio版本:minio-20230320201618.0.0.x86_64.rpm 二、安装 将下载好的rpm包放在文件夹下,然后cd到该目录 sudo rpm -ivh minio-20230320201618.0.0.x86_64.rpm 三、启动 1、minio的位置 which minio cd /usr/local/bin 2、启动 (可…

负载均衡下的webshell连接

一、环境配置 1.在Ubuntu上配置docker环境 我们选择用Xshell来将环境资源上传到Ubuntu虚拟机上(比较简单) 我们选择在root模式下进行环境配置,先将资源文件复制到root下(如果你一开始就传输到root下就不用理会这个) …

MySQL安装部署-集群版

MySQL支持主从复制策略,本文主要描述读写分离集群的安装部署。 如上所示,MySQL数据库的主从复制策略中,主数据库Master同步binary log中的数据到从数据库Slave A以及从数据库Slave B,主数据库Master可提供写服务以及部分读服务、从…

Netty核心——Reactor下篇(十)

任务队列中的Task有3种典型使用场景 用户程序自定义的普通任务 比如有一个非常耗时长的业务 异步执行提交该Channel对应的NioEventLoop的TaskQueue中 用户自定义定时任务 该任务提交到scheduleTaskQueue中 非当前Reactor线程调用Channel的各种方法 例如在推送系统的业务线程…

iOS 17.4 苹果公司正在加倍投入人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

MySQL进阶45讲【8】MySQL事务到底是隔离的还是不隔离的?

1 前言 在 MySQL进阶45讲【3】事务隔离的恩恩怨怨 这篇文章和大家讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看…

【论文复现】基于CGAN的手写数字生成实验——模型改进

文章目录 2.4.1 超参数调整一、batch size二、 epochs三、 Adam:learning rate四、 Adam:weight_decay五、 n_critic 2.4.2 模型改进一、 超参数优化(一)batch size(二)learning rate(三&#x…

嵌入式-PCB-两层板-开关控制LED

参考视频:《黑马程序员嵌入式开发入门模电(模拟电路)基础P50-P63集》 推荐: 《嘉立创PCB下单平台》 《技术指导:下单前技术员必看 》 《下单员必看事项 》 《工艺参数》 文章目录 需求初步画图软件选型关键字&#xf…

IP地址的分类

总结: 网段可以理解为ip地址。 ip地址分为有类和无类。有类是为了好分类管理,但是有缺点利用率不高。无类有vlsm,更好利用率。 ip分为网络标识符(网络 ID)和主机标识符(主机 ID):…