当前位置: 首页 > news >正文

【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.lryc.cn/news/292686.html

相关文章:

  • TCP/IP网络模型
  • github连不上
  • Excel计算表达式的值
  • 26元/月起!腾讯云一键自动搭建4核16G幻兽帕鲁服务器
  • 【C++游戏开发-01】推箱子
  • 【lesson26】学习MySQL事务前的基础知识
  • 持续积累分享金融知识
  • 网络协议 UDP协议
  • 爬虫笔记(三):实战qq登录
  • 又涨又跌 近期现货黄金价格波动怎么看?
  • 软件压力测试:探究其目的与重要性
  • Android.bp入门指南之浅析Android.bp文件
  • 2024年美赛 (D题ICM)| 湖流网络水位控制 |数学建模完整代码+建模过程全解全析
  • 安卓网格布局GridLayout
  • DHCP简介
  • Hadoop生态系统中一些关键组件的详细解析
  • 功能强大的开源数据中台系统 DataCap 2024.01.1 发布
  • Redis的bitmap使用不当,我内存爆了
  • 基于python的新闻爬虫
  • C#基础题
  • AI大语言模型学习笔记之三:协同深度学习的黑魔法 - GPU与Transformer模型
  • c++阶梯之auto关键字与范围for
  • 第八篇:node模版引擎Handlebars及他的高级用法(动态参数)
  • css3 属性 backface-visibility 的实践应用
  • 嵌入式学习第十七天
  • 使用Python的Turtle模块简单绘制烟花效果
  • 数学建模-退火算法和遗传算法
  • Qt开源版 vs 商业版 详细比较!!!!
  • 华为云CodeArts Snap荣获信通院优秀大模型案例及两项荣誉证书
  • 小程序的应用、页面、组件生命周期(超全版)