Эксклюзивный доступ к таблице PostgreSQL через Python или Postgres - PullRequest
0 голосов
/ 16 мая 2011

У меня есть таблица со списком URL-адресов, сохраненная в PG, и у меня есть приложение, которое должно взять подмножество доступных URL-адресов и обработать их. Это приложение обновит обработанное поле = true при получении набора URL-адресов. Я собираюсь иметь несколько экземпляров, работающих на разных машинах. Как я могу гарантировать, что мой доступ к PG является эксклюзивным, чтобы у меня не было одинакового набора URL-адресов на разных компьютерах?

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Вы можете заблокировать строки несколькими способами, в 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 позволяет иметь несколько заданий для работы с разными наборами строк.

2 голосов
/ 16 мая 2011

Эту проблему можно решить исключительно в ваших запросах postgresql с помощью оператора LOCKВот ссылка на документацию с примерами:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...