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

Golang如何将嵌套结构体模型插入PostgreSQL?

问题修复方案

报错原因是PostgreSQL的jsonb类型需要接收JSON格式数据,sqlx无法直接将Go结构体转换为该类型参数;同时你的表名和字段名order是PostgreSQL保留关键字,SQL语句未正确包裹会引发潜在语法问题。

修复步骤:

  1. 序列化结构体为JSON:使用encoding/json包将OrderEntry结构体序列化为JSON字节数组,这是PostgreSQLjsonb类型可接受的输入格式。
  2. 修正SQL语句:给表名和字段名添加双引号,避免与PostgreSQL保留关键字冲突。

修改后的代码:

import "encoding/json"

func (r *RepositoryPostgres) CreateDocument(order L0.Order) error {
    // 序列化结构体为JSON字节
    jsonData, err := json.Marshal(order.OrderEntry)
    if err != nil {
        return err
    }

    tx := r.db.MustBegin()
    // 双引号包裹关键字"order",避免语法错误
    tx.MustExec(`INSERT INTO "order" ("order") VALUES ($1)`, jsonData)
    err = tx.Commit()

    return err
}

额外优化(可选):

如果需要自定义JSON字段名或忽略空值字段,可以给结构体字段添加json标签,示例:

type OrderEntry struct {
    Order_uid          string `json:"order_uid"`
    Track_number       string `json:"track_number"`
    Delivery           Delivery `json:"delivery"`
    // 其余字段按需添加json标签
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:35:03