Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何一次将多行插入postgres SQL_Postgresql_Go_Libpq_Pq - Fatal编程技术网

Postgresql 如何一次将多行插入postgres SQL

Postgresql 如何一次将多行插入postgres SQL,postgresql,go,libpq,pq,Postgresql,Go,Libpq,Pq,可以一次将多行插入Postgres数据库吗?有人能建议一下,是否有一种方法可以将一个切片插入数据库。我已经为每一行创建了一个切片,并通过将所有行切片附加到该行来创建另一个切片(多行)。如何将切片(多行)插入数据库 创建行切片时,我使用的是row:=[]接口{}{}。因为我在每一行都有字符串和int的字段。看来我 插入数据时出错,错误为不支持的类型[]接口{},接口的一部分 实施: rowdata := []interface{}{} row := []interface{}{data.Scena

可以一次将多行插入Postgres数据库吗?有人能建议一下,是否有一种方法可以将一个切片插入数据库。我已经为每一行创建了一个切片,并通过将所有行切片附加到该行来创建另一个切片(多行)。如何将切片(多行)插入数据库

  • 创建行切片时,我使用的是
    row:=[]接口{}{}
    。因为我在每一行都有字符串和int的字段。看来我 插入数据时出错,错误为
    不支持的类型[]接口{},接口的一部分

  • 实施:

    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)
    

    你可以这样做:

    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...)
    
    samples:=//要插入的样本片段
    查询:=`insert into samples()值`
    值:=[]接口{}{}
    对于i,s:=范围样本{
    值=附加(值,s.,s.,<…>)
    numFields:=15//插入的字段数
    n:=i*numFields
    查询+=`(`
    对于j:=0;j

    您可以这样做:

    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...)
    
    samples:=//要插入的样本片段
    查询:=`insert into samples()值`
    值:=[]接口{}{}
    对于i,s:=范围样本{
    值=附加(值,s.,s.,<…>)
    numFields:=15//插入的字段数
    n:=i*numFields
    查询+=`(`
    对于j:=0;j

    将行数据片传递给
    Exec
    时,请确保“解包”行数据片(使用
    ..
    )。i、 e.
    ,err:=db.Exec(qry2,rowdata…
    。在将行数据片传递给
    Exec
    时,请确保“解包”行数据片(使用
    )。i、 e.
    ,err:=db.Exec(qry2,rowdata…
    。非常有用,谢谢。我对使用缓冲区的代码有一个改进:@Alexys为什么要使用缓冲区?Thanks@Madeo当使用字符串时,我使用了缓冲区b/c。缓冲区是这种过程的最佳选择。非常有用,谢谢。我对使用缓冲区的代码有一个改进:@Alexys为什么要使用缓冲区?Thanks@Madeo当使用字符串时,我使用了缓冲区b/c。缓冲区是这种过程的最佳选择。