sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Debo incluir SELECT en una transacción?

La versión corta:"Depende".

La versión larga:

Si está realizando un ciclo de lectura, modificación y escritura, entonces no solo debe estar en una transacción, sino que debe SELECT ... FOR UPDATE cualquier registro que desee modificar posteriormente. De lo contrario, correrá el riesgo de perder las escrituras, en las que sobrescribirá una actualización que hizo otra persona entre el momento en que leyó el registro y el momento en que escribió la actualización.

SERIALIZABLE el aislamiento de transacciones también puede ayudar con esto.

Realmente necesita comprender la concurrencia y el aislamiento. Desafortunadamente, la única respuesta simple y fácil de "solo haz X" sin entenderlo es comenzar cada transacción bloqueando todas las tablas involucradas. La mayoría de la gente no quiere hacer eso.

Sugiero una lectura (o dos, tres o cuatro, es material duro) de los documentos de aislamiento de tx . Experimente con psql concurrentes sesiones (múltiples terminales) para crear condiciones de carrera y conflictos.