clickhouse
clickhouse copied to clipboard
SkipDefaultTransaction = true时,没有办法通过gorm提供的方法写入数据
当我复用gorm.Open的*gorm.DB,且使用CreateInBatches方法写批量写入数据,总是返回:
- result.RowsAffected = 0
- result.Error = nil
在clickhouse表中,也没有写入成功。
最后没办法,通过调用CreateInBatches方法,并且开启Dry(为了拿到SQL)
session := gorm.Open(...)
session.ormClient = session.ormClient.Session(&gorm.Session{
SkipDefaultTransaction: session.ormClient.SkipDefaultTransaction,
Logger: session.ormClient.Logger,
DryRun: true,
})
session.ormClient.Callback().Create().After("trace_before").Register("get_sql", func(db *gorm.DB) {
session.SQL = db.Dialector.Explain(db.Statement.SQL.String(), db.Statement.Vars...)
db.Callback().Create().Remove("get_sql")
})
session.CreateInBatches(arr,2000)
利用Create回调,拿到SQL后。再手动执行SQL:
session := gorm.Open(...)
session.Exec(SQL)
只有每次都gorm.Open,然后把生成的SQL,用Exec执行,才能成功。