You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GORM中如何转义PostgreSQL的?运算符?

在GORM中使用PostgreSQL jsonb的?运算符查询数组包含指定值

因为GORM会把SQL中的?默认解析为参数占位符,直接写agents ? 'target'会导致语法冲突,你可以通过以下两种方式解决:

方法1:使用gorm.Expr包装表达式

通过gorm.Expr将带有?运算符的条件包装起来,让GORM区分开运算符和参数占位符:

// 定义你的模型结构体
type Testing struct {
    ID     uint
    Agents json.RawMessage `gorm:"type:jsonb"` // 也可根据实际需求用[]string类型
}

var records []Testing
targetAgent := "要查询的代理名称"

// 执行查询
if err := db.Where(gorm.Expr("agents ? ?", targetAgent)).Find(&records).Error; err != nil {
    // 这里处理错误逻辑
}

方法2:使用原生SQL查询

直接通过Raw方法执行原生SQL,明确控制运算符和占位符的使用:

var records []Testing
targetAgent := "要查询的代理名称"

if err := db.Raw("SELECT * FROM testing WHERE agents ? ?", targetAgent).Scan(&records).Error; err != nil {
    // 这里处理错误逻辑
}

两种方法的核心都是让GORM不再把作为运算符的?解析成参数占位符,从而正确执行PostgreSQL的jsonb数组包含检查。

内容的提问来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:33:11