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
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 |