【问题标题】:How do I do table locking in GORM(Golang)?如何在 GORM(Golang) 中进行表锁定?
【发布时间】:2022-06-20 04:42:27
【问题描述】:

如何在 GORM(go-gorm) 中进行表锁定?

我找到了row locking 的方法,但找不到表锁定的方法。

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    您可以根据gorm.io docs 使用此代码:

    行级锁定模式,用于更新

    db.Clauses(clause.Locking{Strength: "UPDATE"}).Find(&users)
    // SELECT * FROM `users` FOR UPDATE
    

    表级锁定模式

    对于锁定表,据我所知,Gorm 目前没有选项,因为在合并子句时,Gorm 总是放置 FOR。 但您可以使用原始查询来实现您想要的:

    db.Exec("LOCK TABLE table_name_here IN ACCESS EXCLUSIVE MODE")
    
    // LOCK [ TABLE ] [ ONLY ] name [ * ] [, ...] [ IN lockmode MODE ] [ NOWAIT ]
    

    其中 lockmode 是以下之一:

    ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
    | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
    

    更多关于 Postgres 锁的信息here

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 2019-07-20
      • 2017-05-12
      • 2016-07-28
      • 2021-02-07
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多