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

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

為什么悲觀鎖定在 psql 中對我不起作用?代碼不像我期望的那樣是并發(fā)的

為什么悲觀鎖定在 psql 中對我不起作用?代碼不像我期望的那樣是并發(fā)的

Go
大話西游666 2022-12-19 10:47:27
我正在嘗試獲取和更新列并需要此過程是并發(fā)的。因此,我通過進(jìn)行行級鎖定SELECT FOR UPDATE,然后進(jìn)行計算,然后進(jìn)行更新,所有這些都在具有隔離級別的事務(wù)中進(jìn)行。repeatable read但是,這仍然不是預(yù)期的并發(fā)。此列只是一個隨機列,而不是主鍵或外鍵。之后我將其更改為樂觀鎖定并且有效但我試圖理解為什么這不起作用。我在下面同時運行了這段代碼多次,它的行為方式與我單獨運行它相同次數(shù)時的行為方式不同。_, err = s.xStore.ManageTransaction(func(ctx context.Context, tx *sqlx.Tx) (interface{}, error) {                _, err := tx.Exec("set transaction isolation level repeatable read")                if err != nil {                    return nil, err                }                c, err = s.xStore.GetForUpdate(x)                 //Some calculations                _ = s.xStore.Update(c)                return nil, nil            })            return    }()}這是我使用 FOR UPDATE 鎖定行的 Get 查詢。func (s *xStore) GetForUpdate(id string) (*model.X, error) {    query := `        SELECT * FROM things where id = $1 FOR UPDATE`    _, err := s.db.Exec(query, id)    if err != nil {        return nil, err    }    var x model.X    err := s.db.Get(&x, query, id)    err = s.db.Get(&x, query, id)    if err != nil {        return nil, err    }    return &x, nil}
查看完整描述

1 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗 獲得超3個贊

您的代碼正在不同事務(wù)中執(zhí)行查詢,創(chuàng)建新事務(wù)(db.BeginTx)或使用提供的方式,例如:

  • rows := tx.Query(你的查詢

  • 做一些計算

  • tx.ExecContext

  • tx.Commit

(參考 https://go.dev/doc/database/execute-transactions


查看完整回答
反對 回復(fù) 2022-12-19
  • 1 回答
  • 0 關(guān)注
  • 81 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號