将字符串插入jsonb类型postgres

时间:2019-07-26 01:49:09

标签: postgresql go

我有一个函数,该函数可以生成准备好的语句,以批量插入到postgres中,在这里我试图将字符串插入到postgres中的jsonb类型中。

我的结构如下:

type struct1 struct {
id int
comment string
extra string
}

我的表模式如下:

create table deal (
id bigserial,
comment varchar(75),
extra jsonb
)

我想将[] struct1转储到Postgres DB“交易”中。

我生成预准备语句的函数如下:

func BulkInsert(str []struct1, ctx context.Context) string {
    log.Debug("inserting records to DB")
    query := fmt.Sprintf(`insert into deal (%s) values `, strings.Join(dbFields, ","))
    var numFields = len(dbFields)
    var values []interface{}
    for i, database := range str {
        values = append(values, database.Comment,`'`+database.Extra+`'`)
        n := i * numFields
        query += `(`
        for j := 0; j < numFields; j++ {
            query += `$` + strconv.Itoa(n+j+1) + `,`
        }
        query = query[:len(query)-1] + `),`
    }
    query = query[:len(query)-1]
        return query

预期结果应该是:我应该能够将字符串插入json,或者您可以说将字符串转换为json并转储。

实际结果是: could not save batch: pq: invalid input syntax for type json"

1 个答案:

答案 0 :(得分:0)

json_build_array('exp1'::Text, 'exp2'::Text)的功能可能会对您有所帮助。

  

返回json对象:{'exp1','exp2'}

提取值只需使用->><index>之类的->>1运算符即可获取“ exp2”。

如果您只想插入数据库,则to_json('any element')的功能也应该起作用,该功能可以将任何元素转换为json对象。

您可以在postgres document中获得有关json(jsonb)的更多功能。