2017-08-24 65 views
0

我是Postgres的新手,所以这可能很明显(或者非常困难,我不确定)。用Postgres强制“锁定”和GO

我想迫使一张桌子或一排“锁定”一次至少几秒钟。这将导致第二次手术“等待”。

我使用golang和“github.com/lib/pq”与数据库交互。

我需要这个的原因是因为我正在监视postgresql的项目。谢谢你的帮助。

+0

设置事务隔离级别为SERIALIZABLE https://www.postgresql.org/docs/9.1/static/sql-set-transaction.html – Hackerman

+0

[这](HTTPS://计算器.com/a/31845051/6069012)答案与你想要的非常相似。只要使用任何隔离级别是必要的。 – Gavin

+0

@Hackerman那么,这很好。 – Gavin

回答

0

您还可以使用select ... for update来锁定一个或多个行,以确定事务的长度。

基本上,它是这样的:

begin; 
select * from foo where quatloos = 100 for update; 
update foo set feens = feens + 1 where quatloos = 100; 
commit; 

这将执行对其中quatloos = 100的任何其它事务试图访问的那些行会被阻塞,直到提交或回滚具有FOO表中的行的专用行级锁一旦更新选择已经运行,就会发布。

理想情况下,这些锁应尽可能短。

参见:https://www.postgresql.org/docs/current/static/explicit-locking.html