Re: could not serialize access due to concurrent update

From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Jonathan Finlay <jmfinlayp(at)gmail(dot)com>
Cc: POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: could not serialize access due to concurrent update
Date: 2014-02-06 05:09:20
Message-ID: CAJKUy5hWhja3ipqP-F=eLJMUij8iNJaqyXNiOVUWcXqdpJp5LQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2014-02-05 Jonathan Finlay <jmfinlayp(at)gmail(dot)com>:
> Estimados, estoy teniendo el siguiente error en una de mis aplicaciones.
>
> could not serialize access due to concurrent update
>

Hola Jonathan,

Que versión de postgres es esta?

Si es 9.0 o anterior, significa que tienes una transacción en modo SERIALIZABLE.
Si es 9.1 o superior, está en modo REPEATABLE READ

En cualquier caso las reglas son simples, si estas en una transacción
en uno de esos dos modos esa transacción tratará de actuar como si las
transacciones ocurrieran una después de otra y no de forma
concurrente. Por lo que el siguiente caso generará el error que estas
viendo:

T1: BEGIN;
T1: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

T2: BEGIN;
T2: UPDATE tabla SET ... WHERE pk = <valor>;

T1: UPDATE tabla SET ... WHERE pk = <valor>;

T2: COMMIT;

T1: ERROR: no se pudo serializar el acceso debido a un update concurrente

Como ves el problema se causa porque un registro fue modificado entre
el momento en que se inicio la transacción serializable y el momento
en que esa transacción trato de modificarlo, en ese caso si T2 (la
otra transacción) hace COMMIT recibes ese error y tu aplicación debe
estar en un lazo para repetir la transacción.

--
Jaime Casanova www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitación
Phone: +593 4 5107566 Cell: +593 987171157

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2014-02-06 06:03:47 Re: deadlock detected
Previous Message Jonathan Finlay 2014-02-06 01:47:51 deadlock detected