No creo que esto sea posible. No puede bloquear un acceso de solo lectura a una tabla (a menos que esa selección se haga FOR UPDATE
)
Por lo que sé, la única posibilidad que tienes es usar pg_advisory_lock()
función.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
Pero esto requiere una liberación "manual" de los bloqueos obtenidos a través de él. No obtendrás un desbloqueo automático con eso.
Para bloquear las filas, necesitaría algo como esto:
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
(Tenga en cuenta el uso de la tabla derivada para la parte LIMIT. Consulte el enlace del manual que publiqué para obtener una explicación)
Luego, debe almacenar las ID recuperadas y luego llamar a pg_advisory_unlock()
para cada ID.
Si cada proceso siempre libera todos ID a la vez, simplemente puede usar pg_advisory_unlock_all()
en cambio. Entonces no necesitará almacenar las identificaciones recuperadas.
Tenga en cuenta que esto no evitar que otros lean las filas usando selecciones "normales". Solo funcionará si cada proceso que accede a esa tabla usa el mismo patrón para obtener los bloqueos.