Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group