亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 golang 中的 pgx 驅動程序處理 postgres 查詢錯誤?

如何使用 golang 中的 pgx 驅動程序處理 postgres 查詢錯誤?

Go
qq_花開花謝_0 2022-10-24 09:27:08
我閱讀了有關錯誤處理的官方指南我應用了它err := db.connection.QueryRow("INSERT INTO articles(uri) VALUES ($1)", article.URI).Scan()if err != nil {    var pgErr *pgconn.PgError    if errors.As(err, &pgErr) {        fmt.Println(pgErr.Message) // => syntax error at end of input        fmt.Println(pgErr.Code)    // => 42601    }}代碼不起作用,我的應用程序不打印任何內容。但是postgres日志有ERROR:  duplicate key value violates unique constraint "articles_uri_key"好的,我可以使用標準的 golang 方法:err := db.connection.QueryRow("INSERT INTO articles(uri) VALUES ($1)", article.URI).Scan()if err != nil {    fmt.Println(err)}no rows in result set一個問題,它在 postgres 日志中沒有錯誤時打印。我嘗試替換 if err != nil為if err != errors.New("no rows in result set"),它仍然打印no rows in result set
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

使用 pgx.ErrNoRows

if err != pgx.ErrNoRows {
    fmt.Println(err)}


查看完整回答
反對 回復 2022-10-24
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

請修改您的問題并使其適當。


重復的鍵值是一個有效的錯誤。如果要刪除錯誤,則應避免duplicate進入或unique從中刪除約束。


將 pgx 與 database/sql 一起使用,pgx 只是充當驅動程序sql.ErrNoRows。從 database/sql 庫返回錯誤。pgx.ErrNoRows僅在pgx直接調用函數時返回。由于 database/sql 會從驅動程序中冒出一些錯誤。


sqlStatement := `

   INSERT INTO articles (uri)

    VALUES ($1)

    RETURNING id`

    id := 0

   //make sure what type of data you want to scan you should pass it inside scan()

    err = db.QueryRow(sqlStatement, article.URI).Scan(&id)

    if err != nil {

    if err == sql.ErrNoRows {   //pgx.ErrNoRows

        // there were no rows, but otherwise no error occurred

    } else {

        log.Fatal(err)

    }

}

    fmt.Println("New record ID is:", id)


查看完整回答
反對 回復 2022-10-24
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

我知道這是個老問題,但我剛剛發現解決方案不要使用

 var pgErr *pgconn.PgError

嘗試使用

var pgErr pgx.PgError

反而


查看完整回答
反對 回復 2022-10-24
  • 3 回答
  • 0 關注
  • 280 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號