De korte versie:"Het hangt ervan af".
De lange versie:
Als je een lees-wijzig-schrijfcyclus uitvoert, dan moet het niet alleen een transactie zijn, maar moet je ook SELECT ... FOR UPDATE
alle records die u later wilt wijzigen. Anders loop je het risico verloren schrijfacties te verliezen, waarbij je een update overschrijft die iemand anders heeft gemaakt tussen het moment waarop je het record hebt gelezen en het moment waarop je de update schreef.
SERIALIZABLE
transactie-isolatie kan hierbij ook helpen.
Je moet echt gelijktijdigheid en isolatie begrijpen. Helaas is het enige simpele "doe gewoon X"-antwoord zonder het te begrijpen, om elke transactie te beginnen door alle betrokken tafels te vergrendelen. De meeste mensen willen dat niet.
Ik raad aan om de tx isolatiedocumenten
. Experimenteer met gelijktijdige psql
sessies (meerdere terminals) om race-omstandigheden en conflicten te creëren.