我正在尝试使用 pq。CopyIn 执行批量导入,如下所述:
https://godoc.org/github.com/lib/pq
导入比我尝试过的其他方法快得多,但我发现仅在一条记录中发生唯一约束冲突将导致整个导入失败。
有没有办法设置冲突 不使用pq不做任何事情.文案。
这是我的表格结构的副本
CREATE TABLE test (
id serial PRIMARY KEY,
unique_token VARCHAR ( 10 ) UNIQUE NOT NULL,
frequency INT DEFAULT 0
);
我尝试在下面使用@mkopriva答案,但我得到错误:pq:列“id”中的空值违反了非空约束
下面的代码示例
tx, _ := db.Begin()
_, err = tx.Exec(`CREATE TEMP TABLE token_temp ON COMMIT DROP AS
SELECT id, unique_token FROM test WITH NO DATA`)
if err != nil {
return err
}
stmt, err := tx.Prepare(pq.CopyIn("token_temp", "unique_token"))
if err != nil {
fmt.Println("error here")
return err
}
for _, token := range tokenList {
_, err = stmt.Exec(token)
if err != nil {
return err
}
}
_, err = stmt.Exec()
if err != nil {
log.Fatal(err)
}
err = stmt.Close()
if err != nil {
log.Fatal(err)
}
_, err = tx.Exec(`INSERT INTO test SELECT id, unique_token FROM
token_temp ON CONFLICT(unique_token) DO UPDATE SET frequency=
test.frequency + 1 `)
if err != nil {
fmt.Println("Error")
return err
}
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
MM们
相关分类