我有一个表格,其中包含存储在PG中的URL列表,我有一个应用程序,它应该获取可用URL的子集并处理它们。此应用程序将在检索URL集时更新已处理的field = true。我将在不同的机器上运行多个实例。如何确保我对PG的访问是独占的,所以我不会在不同的机器上使用相同的URL集合?
答案 0 :(得分:2)
使用LOCK
语句可以在postgresql查询中纯粹解决此问题。以下是带有示例的文档的链接:
答案 1 :(得分:2)
您可以在postgresql:table-level锁,行级锁和咨询锁中以多种方式锁定行。
http://www.postgresql.org/docs/9.0/static/explicit-locking.html
但是,在您的情况下,如果您想要良好的并发性,锁定是不够的:
update links
set processing = true
where id in (
select id
from links
where not processed
and not processing
limit 100
for update
)
returning *
额外的processing
字段可以让多个作业在不同的行集上工作。