> 2008/6/21 Arturo <arturomunive@gmail.com>:
>
>>>> Ahora que he dormido un poco pensaba, podria poner uan columna en la
>>>> compra,
>>>> un booleano quiza que se llame en_proceso
>>>> y que cuando voy a ejecutar el pago o transaccion lo primero que haga es
>>>> marcarla (y hacer un commit) luego ya puedo procesar tranquilo en mi
>>>> transaccion normal.
>>>>
>>>> si haces un SELECT ... FOR UPDATE en la tabla de compras, si alguien
>>>> desea insertar un pago no tendra que intentar bloquear los registros
>>>> en la tabla de compras? pero como los registros estaran bloqueados no
>>>> podra hasta que sueltes el bloqueo en la tabla de compras, solo
>>>> entonces podra seguir procesando su insercion y para entonces tu
>>>> transacion ya habra hecho COMMIT o ROLLBACK... en esencia es lo mismo
>>>> que tu campo "en_proceso" pero con bloqueos y sin datos de que
>>>> preocuparse..
Ya entendí, no se que me paso lei la documentacion de SELECT FOR UPDATE
pero no había caido en cuenta que era lo mismo.
si el pago es para una compra digamos con id = 7
entonces puedo hacer un
SELECT ...FROM compras WHERE id = 7 FOR UPDATE
Entonces cuando otro procedimiento quiera ejecutar un pago a la misma
compra tendría que basicamente ejecutar la misma sentencia (como tu
mencionas)
SELECT ...FROM compras WHERE id = 7 FOR UPDATE
Entonces tendra que esperar (A menos que use NOWAIT) y asi me aseguro no
hacer un bloqueo a nivel de tabla si no a nivel de filas, ganando en
performance
ya que pagos para otras compras no se bloquearian.
Además, otra razon por la cual es correcto el select for update en la
compra, es que al final la puedo marcar como pagada (un update).
Gracias Jaime con eso doy contestada mi pregunta.la respueta estaba en
SELECT FOR UPDATE
--
---------------------------------------------------------
ARTURO MUNIVE SOLIS
Telefono: (51-54)424701
Celular : (51-54)959992034
[Desarrollo De Soluciones Java-PostgreSQL Arequipa-Perú]
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
No comments:
Post a Comment