通过Python或Postgres对PostgreSQL表进行独占访问
我有一个表格,里面存储了一些网址,这些网址保存在PG(PostgreSQL数据库)里。我有一个应用程序,它需要从这些网址中选取一部分进行处理。当这个应用程序获取到网址后,会把处理过的标记为“已处理”。我会在不同的机器上运行多个实例。请问我该如何确保我对PG的访问是独占的,这样就不会在不同的机器上获取到相同的网址呢?
2 个回答
2
这个问题可以通过在你的PostgreSQL查询中使用LOCK
语句来解决。这里有一个链接,里面有文档和示例:
2
在PostgreSQL中,你可以通过几种方式来锁定数据行:表级锁、行级锁和顾问锁。
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
字段使得可以有多个任务同时处理不同的数据行。