Golang如何将嵌套结构体模型插入PostgreSQL?
问题修复方案
报错原因是PostgreSQL的jsonb类型需要接收JSON格式数据,sqlx无法直接将Go结构体转换为该类型参数;同时你的表名和字段名order是PostgreSQL保留关键字,SQL语句未正确包裹会引发潜在语法问题。
修复步骤:
- 序列化结构体为JSON:使用
encoding/json包将OrderEntry结构体序列化为JSON字节数组,这是PostgreSQLjsonb类型可接受的输入格式。 - 修正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
相关产品推荐
相关产品推荐

