如何获取Go语言中SQL插入的错误详细信息?

xkrw2x1b  于 2023-03-10  发布在  Go
关注(0)|答案(1)|浏览(123)

我试图用Go语言向数据库中插入一些数据,由于数据的性质(从另一个工具导出大量数据),我有时会碰到一些模型约束。
使用下面的Go语言代码

_, err := db.Exec(query, params...)
if err != nil {
    log.Print(err)
}

我只得到这样的输出

2023/03/10 09:40:26 pq: insert or update on table "table" violates foreign key constraint "table_constraint"
exit status 1

当我从pgAdmin执行相同的Insert时,我得到了相同的错误,但也得到了一些DETAIL信息。

DETAIL:  Key (id)=(abc) is not present in table "table_2".

有没有办法在Go语言中也得到这个DETAIL信息?我查了文档,没有找到任何东西,但是也许有办法?

c3frrgcw

c3frrgcw1#

一般来说,您使用的数据库驱动程序会有一个自定义的错误类型。您可以Asserterr值为该错误类型,然后,根据驱动程序的实现,您应该能够收集有关该问题的更多细节。例如,当使用github.com/lib/pq时,您可以Assert*pq.Error并读取其Detail字段:

_, err := db.Exec(query, params...)
if err != nil {
    if e, ok := err.(*pq.Error); ok {
        log.Print(e.Detail)
    }
}

相关问题