【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时,尽量用公司内部的组件或者可靠的三方工具,自己写非常容易出错
相关文章:
【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下发的渠道,mode…...
TCP/IP网络模型
大家好我是苏麟 , 今天聊聊TCP/IP四层网络模型 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 应用层 最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都…...
github连不上
github连不上 错误提示解决方案steam 采用Hosts加速 错误提示 fatal: unable to access ‘https://github.com/Ada-design/qianduan.git/’: Failed to connect to github.com port 443 after 21073 ms: Couldn’t connect to server 解决方案 下载steam https://steampp.ne…...
Excel计算表达式的值
Excel如何求解表达式 其中第三种方法最简单,通过剪贴板实现 如,单元格A1中输入了 12345 然后在A2输入 “”&A1 然后复制A2,打开剪贴板,点击刚才复制的内容,就会在A2显示计算结果...
26元/月起!腾讯云一键自动搭建4核16G幻兽帕鲁服务器
腾讯云无需任何配置自动搭建幻兽帕鲁游戏联机服务器,游戏24小时在线,4核16G游戏联机服务器低至26元/月起,新手小白也能一键搭建属于自己的幻兽帕鲁游戏联机服务器! 第一步:购买游戏联机服务器 购买入口:htt…...
【C++游戏开发-01】推箱子
C游戏开发 文章目录 C游戏开发[TOC](文章目录) 前言一、逻辑分析1.1地图实现1.2人物的移动1.2.1小人移动1.2.2其他移动 1.3墙壁的碰撞1.4箱子的推动1.4.1什么时候推箱子1.4.2什么情况可以推箱子 1.5胜利的判断1.6卡关的处理1.7关卡的切换 二、DEMO代码2.1游戏框架2.2各功能函数…...
【lesson26】学习MySQL事务前的基础知识
文章目录 CURD不加控制,会有什么问题?CURD满足什么属性,能解决上述问题?什么是事务?为什么会出现事务事务的版本支持 CURD不加控制,会有什么问题? CURD满足什么属性,能解决上述问题&…...
持续积累分享金融知识
持续积累分享金融知识 一、什么是两融余额?二、什么是量化?三、散户可以进行量化投资么? 一、什么是两融余额? 两融余额是指投资者在融资买入和融券卖出交易中,通过向券商借入资金或证券进行交易,并且在交…...
网络协议 UDP协议
网络协议 UDP协议 在之前的文章中有对UDP协议套接字的使用进行讲解,本文主要对UDP协议进行一些理论补充。 文章目录 网络协议 UDP协议1. 概念2. UDP协议格式2.1 数据报长度2.2 校验和/检验和2.2.1 CRC校验2.2.2 MD5算法 1. 概念 UDP,即User Datagram P…...
爬虫笔记(三):实战qq登录
咳咳,再这样下去会进橘子叭hhhhhh 以及,这个我觉得大概率是成功的,因为测试了太多次,登录并且验证之后,qq提醒我要我修改密码才可以登录捏QAQ 1. selenium 有关selenium具体是啥,这里就不再赘述了&#x…...
又涨又跌 近期现货黄金价格波动怎么看?
踏入2024年一月的下旬,现货黄金价格可以说没了之前火热的状态,盘面上是又涨又跌。面对这样的行情,很多投资者不知道如何看了。下面我们就来讨论一下怎么把握近期的行情。 先区分走势类型。在现货黄金市场中有两种主要的走势类型,一…...
软件压力测试:探究其目的与重要性
随着软件应用在各行各业中的广泛应用,确保软件在高负载和极端条件下的稳定性变得至关重要。软件压力测试是一种验证系统在不同负载条件下的性能和稳定性的方法。本文将介绍软件压力测试的目的以及为什么它对软件开发和部署过程至关重要。 验证系统性能的极限&#x…...
Android.bp入门指南之浅析Android.bp文件
文章目录 Android.bp文件是什么?Android.bp的主要作用模块定义依赖关系构建规则模块属性插件支持模块的可配置性 为什么会引入Android.bp语法例子 Android.bp文件是什么? Android.bp 文件是 Android 构建系统(Android Build Systemÿ…...
2024年美赛 (D题ICM)| 湖流网络水位控制 |数学建模完整代码+建模过程全解全析
当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看美赛的D题! 完整内容可以在文章末尾领…...
安卓网格布局GridLayout
<?xml version"1.0" encoding"utf-8"?> <GridLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:la…...
DHCP简介
定义 动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种用于集中对用户IP地址进行动态管理和配置的技术。即使规模较小的网络,通过DHCP也可以使后续增加网络设备变得简单快捷。 DHCP是在BOOTP(BOOTstrap Protoc…...
Hadoop生态系统中一些关键组件的详细解析
1. Hadoop核心组件 HDFS(Hadoop Distributed File System): 分布式文件存储系统。提供高吞吐量的数据访问,非常适合用于大规模数据集。有高容错性,通过在多个节点间复制数据块来实现。 MapReduce: 一种编程模型,用于在…...
功能强大的开源数据中台系统 DataCap 2024.01.1 发布
推荐一套基于 SpringBoot 开发的简单、易用的开源权限管理平台,建议下载使用: https://github.com/devlive-community/authx 推荐一套为 Java 开发人员提供方便易用的 SDK 来与目前提供服务的的 Open AI 进行交互组件:https://github.com/devlive-commun…...
Redis的bitmap使用不当,我内存爆了
背景 最近发现Redis的内存持续暴涨, 涨的有点吓人,机器都快扛不住了,不得不进行Redis内存可视化分析,发现大量的String类型的大key 经分析,最近上线了页面UV的统计,那目前如何做的呢? 通过访…...
基于python的新闻爬虫
咱们这个任务啊,就是要从一个指定的网站上,抓取新闻内容,然后把它们整整齐齐地保存到本地。具体来说,就是要去光明网的板块里,瞅瞅里面的新闻,把它们一条条地保存下来。 首先,咱得有个网址&…...
开源串口调试助手SSCom:跨平台硬件调试的终极解决方案
开源串口调试助手SSCom:跨平台硬件调试的终极解决方案 【免费下载链接】sscom Linux/Mac版本 串口调试助手 项目地址: https://gitcode.com/gh_mirrors/ss/sscom 在嵌入式开发、物联网设备调试和工业控制领域,串口通信调试工具是开发者不可或缺的…...
深度测评2026年三星SDI电池和三星道达尔化工原料权威榜单
在当前的工程塑料供应链领域,制造业企业普遍面临着一个核心矛盾:一方面,高端制造场景对材料性能的要求日益严苛,涉及耐高温、无卤阻燃、高频低损耗等复杂指标;另一方面,传统的原料采购模式却存在信息不对称…...
Entire Dashboard:可视化AI编程协作过程,解决Git上下文丢失难题
1. 项目概述如果你和我一样,最近几年在开发工作中深度依赖了像 Cursor、Claude Code 这类 AI 编程助手,那你肯定也遇到过类似的困惑:Git 提交记录里只有冷冰冰的代码变更,但那些真正驱动我写出这段代码的 AI 对话、思考过程、被否…...
终极Windows窗口置顶工具:AlwaysOnTop完整使用指南
终极Windows窗口置顶工具:AlwaysOnTop完整使用指南 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否经常在多个窗口间频繁切换,重要信息总被其他程序…...
开源全栈监控工具CheckCle:轻量自托管,五分钟搭建系统与应用监控
1. 项目概述:一个为开发者而生的全栈监控方案如果你和我一样,长期在运维和开发一线摸爬滚打,那你肯定对监控这件事又爱又恨。爱的是,一套好的监控系统是系统的“眼睛”和“耳朵”,能让你在用户投诉之前就发现问题&…...
Leaflet数据加载实战:从本地GeoJSON到在线地图服务的完整指南
1. 从零开始:Leaflet与空间数据加载基础 第一次接触Leaflet加载空间数据时,我盯着屏幕上的空白地图和报错信息发呆了半小时。作为轻量级地图库的标杆,Leaflet确实能让开发者快速创建交互式地图,但数据加载这个环节却藏着不少&quo…...
SakuraFrp实战:三步打通Linux服务器SSH远程管理通道
1. 为什么需要内网穿透管理Linux服务器 很多开发者都遇到过这样的困境:买了一台云服务器或者在家里搭建了Linux开发环境,却发现没有公网IP地址。这意味着你无法直接通过互联网远程连接到这台机器进行管理。想象一下,每次调试代码或者部署服务…...
手把手教你:误删pyvenv.cfg后,如何快速重建Python虚拟环境(附详细步骤)
手把手教你:误删pyvenv.cfg后,如何快速重建Python虚拟环境(附详细步骤) 虚拟环境是Python开发中的"隔离舱",而pyvenv.cfg文件则是这个隔离舱的"控制面板"。当你发现误删这个关键文件后,…...
Arm Musca-B1时钟系统架构与低功耗配置详解
1. Arm Musca-B1时钟系统架构解析 在嵌入式系统开发中,时钟管理是决定系统性能和功耗的关键因素。Arm Musca-B1测试芯片采用了一套高度灵活的时钟架构,通过寄存器配置可以实现精确的时钟控制。这套架构主要由以下几个核心组件构成: PLL&…...
构建跨AI助手的通用记忆层:从向量检索到浏览器扩展实践
1. 项目概述:一个被归档的浏览器记忆层工具 如果你和我一样,经常在ChatGPT、Claude、Perplexity这些不同的AI助手之间切换,肯定会遇到一个共同的烦恼:每次对话都像是第一次见面。你需要在每个新对话里重复介绍自己是谁、你的项目…...
