Re: Debo usar Transacciones?

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Jaime Casanova <systemguards(at)gmail(dot)com>
Cc: Miguel Angel <mvillagomez(at)sayab(dot)com(dot)mx>, Leonel Nunez <lnunez(at)enelserver(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Debo usar Transacciones?
Date: 2006-04-20 12:52:30
Message-ID: 20060420125230.GA32726@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Jaime Casanova escribió:

> debes tener presente que si usas LOCK TABLE nadie mas podra
> seleccionar un nuevo valor hasta que tu hayas terminado... si como
> dices vas a ejecutar una serie de inserciones quiza pueda resultar
> molesto...

Efectivamente.

> pregunta para alvaro? podria solucionarse usando ISOLATION LEVEL
> SERIALIZABLE? la verdad, se que es util pero nunca lo he probado, hace
> unos dias me puse la meta de probarle en estos meses... ;)

En este caso no. La serializabilidad te sirve si ambas transacciones
estan modificando el mismo registro, pero aca eso no sucede.

Considera lo siguiente:

-- sesion 1
BEGIN;
-- establece el snapshot de esta
-- transaccion
SELECT ...;
UPDATE foo set a='h' WHERE id=42; -- sesion 2
BEGIN
-- establece el snapshot de esta
-- transaccion
SELECT ...;
COMMIT
UPDATE foo set a='g' WHERE id=42;
COMMIT

Si ambas transacciones son READ COMMITTED no hay problema; el update de
la segunda va a ver el registro modificado por la segunda y lo va a
alterar.

En cambio si son SERIALIZABLE, va a fallar porque la segunda quiere
modificar el mismo registro que modifico la primera, pero ese registro
ya no existe (puesto que fue modificado). Eso te lanza un
"serializability error".

Si las transacciones solo leen de una determinada tabla, y solo crean
registros (no actualizan), entonces no hay manera de detectar un
problema de serializabilidad.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sebastián Villalba 2006-04-20 13:22:06 Re: Problema con IF N=?ISO-8859-1?Q?OT_FOUND_en_funci=F3?=n plpgsql
Previous Message Toni Casueps 2006-04-20 10:57:51 comparar tablas