Re: Duda en necesidad de bloquear tablas

From: "Arturo Munive [pgsql-es-ayuda] " <arturomunive(at)gmail(dot)com>
To: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
Cc: Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Duda en necesidad de bloquear tablas
Date: 2008-06-23 15:14:08
Message-ID: 485FBDC0.5030600@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Jaime Casanova escribió:
> 2008/6/21 Arturo <arturomunive(at)gmail(dot)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ú]

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Calabaza 2008-06-23 17:12:35 Re: Ayuda con una funcion SQL
Previous Message Luis D. García 2008-06-23 15:10:56 Re: De Oracle Forms y PL/PSQL a PostgreSQL