2014-02-05 Jonathan Finlay <[email protected]>: > 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 ([email protected]) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda
