简体   繁体   English

如何一次性将多行插入Postgres SQL

[英]How to insert multiple rows into postgres SQL in a go

  1. Is it possible to insert multiple rows into Postgres database at once? 是否可以一次在Postgres数据库中插入多行? Could someone please suggest if there is a way to insert a slice of slices into database. 有人可以建议是否有一种方法可以将切片插入数据库。 I have created a slice for each row and created a another slice(multiple rows) by appending all the row slices to it. 我为每一行创建了一个切片,并通过将所有行切片附加到该切片来创建了另一个切片(多行)。 how do I insert the slice(multiple rows) into db? 如何将切片(多行)插入数据库?

  2. When I create a row slice, I'm using row := []interface{}{} . 创建行切片时,我使用的是row := []interface{}{} Because I have fields which are strings and int in each row. 因为我在每一行中都有字符串和整数字段。 Looks like I get an error when I'm inserting data and the error is unsupported type []interface {}, a slice of interface 插入数据时出现错误,并且错误unsupported type []interface {}, a slice of interface

Implementation: 实现方式:

rowdata := []interface{}{}
row := []interface{}{data.ScenarioUUID, data.Puid, data.Description, data.Status, data.CreatedBy, data.CreatedAt, data.UpdatedBy, data.UpdatedAt, data.ScopeStartsAt, data.ScopeEndsAt, Metric, MetricName, Channel, date, timeRangeValue}
rowdata = append(rowdata, row)

qry2 := `INSERT INTO sample (scenarioUuid,
            puId,
            description,
            status,
            createdBy,
            createdAt,
            updatedBy,
            updatedAt,
            scopeStartsAt,
            scopeEndsAt,
            metric,
            metric_name,
            channel,
            time,
            value) VALUES ($1, $2, $3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15)`

if _, err := db.Exec(qry2, rowdata); err != nil {
    panic(err)

You could do something like this: 您可以执行以下操作:

samples := // the slice of samples you want to insert

query := `insert into samples (<the list of columns>) values `

values := []interface{}{}
for i, s := range samples {
    values = append(values, s.<field1>, s.<field2>, < ... >)

    numFields := 15 // the number of fields you are inserting
    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] // remove the trailing comma

db.Exec(query, values...)

https://play.golang.org/p/YqNJKybpwWB https://play.golang.org/p/YqNJKybpwWB

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM