通过Python或Postgres对PostgreSQL表进行独占访问

0 投票
2 回答
599 浏览
提问于 2025-04-16 17:42

我有一个表格,里面存储了一些网址,这些网址保存在PG(PostgreSQL数据库)里。我有一个应用程序,它需要从这些网址中选取一部分进行处理。当这个应用程序获取到网址后,会把处理过的标记为“已处理”。我会在不同的机器上运行多个实例。请问我该如何确保我对PG的访问是独占的,这样就不会在不同的机器上获取到相同的网址呢?

2 个回答

2

这个问题可以通过在你的PostgreSQL查询中使用LOCK语句来解决。这里有一个链接,里面有文档和示例:

http://www.postgresql.org/docs/8.1/static/sql-lock.html

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 字段使得可以有多个任务同时处理不同的数据行。

撰写回答