【发布时间】:2022-06-20 04:42:27
【问题描述】:
如何在 GORM(go-gorm) 中进行表锁定?
我找到了row locking 的方法,但找不到表锁定的方法。
【问题讨论】:
如何在 GORM(go-gorm) 中进行表锁定?
我找到了row locking 的方法,但找不到表锁定的方法。
【问题讨论】:
您可以根据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
【讨论】: