第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

lib/pq postgres 驅動程序中的連接泄漏

lib/pq postgres 驅動程序中的連接泄漏

Go
白衣非少年 2022-04-26 14:52:27
鑒于它db是類型*sql.DB(uginglib/pq驅動程序),以下代碼會導致連接泄漏:    rows, err := db.Query(        "select 1 from things where id = $1",        thing,    )    if err != nil {        return nil, fmt.Errorf("can't select thing (%d): %w", thing, err)    }    found := false    for rows.Next() {        found = true        break    }反復調用此代碼會增加打開連接的數量,直到用盡:select sum(numbackends) from pg_stat_database;// 5// 6// 7// ...// 80我如何解決它?
查看完整描述

1 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

您編寫的代碼存在一些問題。避免連接泄漏問題的直接答案是關閉文檔中提到rows的迭代器。調用它的正常方式是在語句中:defer


    rows, err := db.Query(

        "select 1 from things where id = $1",

        thing,

    )

    if err != nil {

        return nil, fmt.Errorf("can't select thing (%d): %w", thing, err)

    }

    defer rows.Close()


    found := false


    for rows.Next() {

        found = true

        break

    }

其次,由于您只關心單個結果,因此根本沒有理由獲取多行結果集,這也將隱式解決連接泄漏問題。有關在 Postgres 中檢查存在的最快方法的討論,請參閱這篇文章。如果我們在這里調整:


    row, err := db.QueryRow(

        "select EXISTS(SELECT 1 from things where id = $1)",

        thing,

    )

    if err != nil {

        return nil, fmt.Errorf("can't select thing (%d): %w", thing, err)

    }

    var found bool

    if err := row.Scan(&found); err != nil {

        return nil, fmt.Errorf("Failed to scan result: %w", err)

    }


查看完整回答
反對 回復 2022-04-26
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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