Establecer atómicamente el valor SERIAL al confirmar la transacción

Digamos que tengo una mesa donde quiero usar unserial como clave principal para solicitar cambios del cliente. El cliente preguntará "dame los cambios después de la tecla X". Sin usoSERIALIZABLE nivel de aislamiento o bloqueo, esto es propenso a las condiciones de carrera.

La transacción A puede comenzar primero, y hacer sus escrituras, luego demorar mucho tiempo en confirmarse. Mientras tanto, la transacción B comenzará y se comprometerá, antes de que A se comprometa. La escritura desde B obtendrá una clave primaria más alta que la escritura desde A. Si un cliente ahora solicita cambios, perderá la escritura aún no confirmada de A y observará la clave primaria más alta más nueva. Entonces, incluso después de que A se compromete, el cliente nunca verá ese cambio, porque su clave es menor que el cambio que el cliente ya recibió.

¿Es posible hacer el valor de unserial (o similar de un contador) se determinará atómicamente en el momento de la confirmación, de modo que tengamos la garantía de que será más alto que todos los demás cuando se comete, y más bajo que todos los que se cometerán después de él Si no, ¿cuál es la mejor manera de resolver este problema?

Respuestas a la pregunta(1)

Su respuesta a la pregunta