PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

दौड़ की स्थिति से बचना, Django + Heroku + PostgreSQL

गेम मॉडल में काउंटर और विजेता उपयोगकर्ता डालने का एक आसान समाधान होगा। फिर आप select_for_update . का उपयोग कर सकते हैं रिकॉर्ड लॉक करने के लिए:

game = Game.objects.select_for_update().get(pk=gamepk)
if game.number + 1 == X
    # he is a winner
    game.winner = request.user
    game.number = game.number + 1
    game.save()

else:
    # u might need to stop the game if a winner already decided

उसी लेन-देन के भाग के रूप में आप Player . भी रिकॉर्ड कर सकते हैं s ऑब्जेक्ट्स ताकि आप यह भी जान सकें कि किसने क्लिक किया और अन्य जानकारी को ट्रैक किया, लेकिन नंबर और विजेता को वहां न डालें। select_for_update use का उपयोग करने के लिए आपको postgresql_psycopg2 . का उपयोग करने की आवश्यकता है बैकएंड।

अपडेट करें: चूंकि django डिफ़ॉल्ट रूप से ऑटोोकॉमिट सेट करता है, इसलिए आपको उपरोक्त कोड को परमाणु लेनदेन में लपेटना होगा। django से docs

आप अपने विचार को @transaction.atomic . से सजा सकते हैं :

from django.db import transaction

@transaction.atomic
def viewfunc(request):
    # This code executes inside a transaction.
    do_stuff()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL के साथ XML में एक से कई संबंध कैसे प्रस्तुत करें

  2. सीएसवी से तालिका में आईडी सीरियल कॉलम ऑटो-इन्क्रीमेंटिंग पीएसक्यूएल के साथ कॉपी करें

  3. बनाने के लिए कोई स्कीमा नहीं चुना गया है ... त्रुटि

  4. पोस्टग्रेज में XML कॉलम से डेटा निकालने के लिए xpath का उपयोग करना

  5. जेपीए फ्लश बनाम प्रतिबद्ध