Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

412
Views
¿Puede el punto muerto select_for_update de Django cuando se usa en el mismo registro dos veces?

Tengo un código que sería mucho más simple con llamadas anidadas a select_for_update() , pero me temo que me estoy preparando para un punto muerto.

Ejemplo:

 with transaction.atomic(): uu1 = UniUser.objects.select_for_update().get(pk=uupk) with transaction.atomic(): uu2 = UniUser.objects.select_for_update().get(pk=uupk) # why no deadlock here?? uu2.bio = 'i like pizza' uu2.save() uu1.bio = 'i like pie' uu1.save()

Habría esperado que el segundo select_for_update() se bloqueara, ya que está tratando de bloquear un registro ya bloqueado, pero este código funciona bien y terminamos con 'i like pie' en la biografía. Lo mismo sucede si elimino la transacción interna y solo bloqueo el mismo registro dos veces en la misma transacción.

¿Por qué no hay punto muerto aquí? ¿Es este un código seguro?

En caso de que la respuesta sea específica de la base de datos, estoy usando Postgres.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El candado es adquirido y retenido por su transacción.

Cuando intenta tomarlo nuevamente, no sucede nada ya que su transacción ya tiene un candado en esa fila.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!