Nivel de aislamiento serializable

La serailización proporciona el nivel más alto de aislamiento transaccional. Cuando una transacción está en el nivel serializable, la consulta sólo ve los datos cursados antes de que la transacción comience y nunca ve ni datos sucios ni los cambios de transacciones concurrentes cursados durante la ejecución de la transacción. Por lo tanto, este nivel emula la ejecución de transacciones en serie, como si las transacciones fueran ejecutadas un detrás de otra, en serie, en lugar de concurrentemente.

Si una fila devuelta por una consulta durante la ejecución de una declaración UPDATE (o DELETE, o SELECT FOR UPDATE) está siendo actualizada por una transacción concurrente no cursada, la segunda transacción que trata de actualizar esta fila esperará a que la otra transacción se curse o pare. En caso de que pare, la transacción que espera puede proceder a cambiar la fila. En el caso de una transacción concurrente se curse, una transacción serializable será parada con el mensaje

ERROR:  Can't serialize access due to concurrent update
    
porque una transacción serializable no puede modificar filas cambiadas por otras transacciones después de que la transacción serializable haya empezado.

Nota

Tenga en cuenta que los resultados de la ejecución de SELECT o INSERT (con una consulta) no se verán afectados por transacciones concurrentes.