没有交易"select for share"不会生效?



为了理解" select for share ",我阅读了https://shiroyasha.io/selecting-for-share-and-update-in-postgresql.html.

我只是想确认一下,如果我执行了&;select for share&;没有事务,如:

select * from table_a where id = 1 for share

由于事务只有一个"select"语句,虽然"for share"获取了一个锁,但是这个锁会立即被释放,因此它大致等于"无锁",对吧?

确实,锁不会在语句执行之后被持有,所以它是相当无用的。但是,SELECT ... FOR SHARE将像任何其他行锁一样修改被锁定的行,从而导致写操作并阻塞所有并发修改,并且语句将获取一个事务ID。

所以你是在为没有任何好处的行锁付出代价。