sql >> Base de Datos >  >> RDS >> PostgreSQL

bloquear las filas hasta el próximo postgres seleccionado

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.