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

¿Cuándo se selecciona para actualizar el bloqueo y desbloqueo?

Los bloqueos se toman durante (generalmente al comienzo o cerca de) la ejecución de un comando. Los bloqueos (excepto los bloqueos de aviso) se liberan solo cuando una transacción se compromete o revierte. No hay FOR UNLOCK , ni hay un UNLOCK comando para revertir los efectos del LOCK a nivel de tabla dominio. Todo esto se explica en la sección de control de concurrencia de la documentación de PostgreSQL.

Debe confirmar o revertir su transacción para liberar los bloqueos.

Además, en realidad no tiene sentido preguntar "¿esta fila ya ha sido eliminada por otra transacción concurrente?". Realmente no se elimina hasta que se confirma la transacción que eliminó la fila... e incluso entonces, podría haber eliminado y reinsertado la fila u otra transacción simultánea podría haber insertado la fila nuevamente.

¿Está creando una cola de tareas o un sistema de cola de mensajes por casualidad, porque si es así, ese problema está resuelto y no debería intentar reinventar esa rueda inusualmente complicada? Consulte PGQ, ActiveMQ, RabbitMQ, ZeroMQ, etc. (Las futuras versiones de PostgreSQL pueden incluir FOR UPDATE SKIP LOCKED ya que se está probando, pero no se ha publicado en el momento de escribir este artículo).

Le sugiero que publique una nueva pregunta con una descripción más detallada del problema subyacente que está tratando de resolver. Está asumiendo que la solución a su problema es "averiguar si la fila ya se eliminó" o "desbloquear la fila". Probablemente esa no sea la solución. Es un poco como alguien que dice "¿dónde compro gasolina?" cuando su bicicleta de empuje no funciona, por lo que asume que se ha quedado sin combustible. El combustible no es el problema, el problema es que las bicicletas de empuje no llevan combustible y hay que pedalearlas.

Explique los antecedentes. Explique lo que está tratando de lograr. Por encima de todo, no publique pseudocódigo, publique el código real con el que tiene problemas , preferiblemente en una forma autónoma y ejecutable.