pg.CopyTo是pg库中用于向PostgreSQL服务器发送二进制数据的方法。gorm框架提供了使用pg.CopyTo向数据库中插入多行记录的功能。
使用方式如下:
- 定义一个结构体,该结构体包含要插入的每一行记录的字段信息。
type User struct {
ID int
Name string
Age int
}
- 创建一个gorm.DB对象,并打开postgres扩展。
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 打开postgres扩展
db.Exec("CREATE EXTENSION IF NOT EXISTS \"pgcrypto\";")
- 使用pg.CopyTo方法向数据库中插入多行记录。
users := []User{
{ID: 1, Name: "Alice", Age: 18},
{ID: 2, Name: "Bob", Age: 20},
{ID: 3, Name: "Charlie", Age: 22},
}
values := make([][]interface{}, len(users))
for i, user := range users {
values[i] = []interface{}{user.ID, user.Name, user.Age}
}
query := fmt.Sprintf("COPY users (id, name, age) FROM STDIN WITH CSV DELIMITER ','")
err = db.Exec(query).Rows(pg.CopyTo(values)).Error
if err != nil {
panic(err)
}
- 注意事项
- 在执行COPY操作之前,需要先创建好表和序列等必要的数据库对象。
- COPY操作会把整个数据块一次性地写入到数据库中,所以在插入大量数据时,需要设置适当的缓冲区大小。
- COPY操作是直接向数据库写入二进制数据,因此不能使用gorm的模型定义语法。