Не мисля, че това е възможно. Не можете да блокирате достъп само за четене до таблица (освен ако този избор не е направен FOR UPDATE
)
Доколкото мога да преценя, единственият шанс, който имате, е да използвате pg_advisory_lock()
функция.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
Но това изисква "ръчно" освобождаване на ключалките, получени чрез него. С това няма да получите автоматично отключване.
За да заключите редовете, ще ви трябва нещо подобно:
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
(Обърнете внимание на използването на получената таблица за частта LIMIT. Вижте ръчната връзка, която публикувах за обяснение)
След това трябва да съхраните извлечените идентификатори и по-късно да извикате pg_advisory_unlock()
за всеки ID.
Ако всеки процес винаги освобождава всички ID наведнъж, можете просто да използвате pg_advisory_unlock_all()
вместо. Тогава няма да е необходимо да съхранявате извлечените идентификатори.
Обърнете внимание, че това ще не не позволява на другите да четат редовете, използвайки "нормални" селекции. Ще работи само ако всеки процес, който има достъп до тази таблица, използва същия модел за получаване на ключалките.