Как быстро вставить несколько строк в postgres SQL

  1. Можно ли одновременно вставить несколько строк в базу данных Postgres? Может ли кто-нибудь предложить, есть ли способ вставить фрагмент фрагментов в базу данных. Я создал фрагмент для каждой строки и создал еще один фрагмент (несколько строк), добавив к нему все фрагменты строк. как вставить фрагмент (несколько строк) в БД?

  2. Когда я создаю срез строки, я использую row := []interface{}{} . Потому что у меня есть поля, которые являются строками и int в каждой строке. Похоже, я получаю сообщение об ошибке, когда вставляю данные, и ошибка unsupported type []interface {}, a slice of interface

Реализация:

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)

person pretty08    schedule 02.07.2018    source источник
comment
Не забудьте распаковать фрагмент данных строки (используя ...), когда вы передаете его Exec. то есть _, err := db.Exec(qry2, rowdata...).   -  person mkopriva    schedule 02.07.2018


Ответы (1)


Вы можете сделать что-то вроде этого:

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

person mkopriva    schedule 02.07.2018