في مزامنة مخزون افتراضية، تصل رسالة الإصدار الخامس أولًا ثم تصل رسالة الإصدار الرابع متأخرة. إذا كان التحديث عند التعارض يستبدل القيم في كل مرة، يرجع المخزون إلى حالة قديمة. تحتاج عملية الحفظ إلى معرفة ترتيب نسخ السجل، لأن ترتيب وصول الرسائل قابل للتغير.
اربط التعارض بهوية السجل
ضع قيدًا فريدًا يعبر عن الهوية الفعلية، مثل المؤسسة ومعرف الصنف لدى المصدر. عند INSERT مع ON CONFLICT DO UPDATE يمكن قراءة الصف الحالي وقراءة الصف المقترح عبر excluded. اجعل شرط التحديث يقارن الإصدارين، بحيث يقبل إصدارًا أعلى. يفترض هذا التصميم أن مصدر السجل يصدر أرقامًا متزايدة يمكن مقارنتها داخل هذه الهوية.
اختبر الكتابة المرفوضة دون خطأ
ابدأ بجدول اختبار. أرسل الإصدار الخامس ثم الرابع لنفس الهوية وتحقق من بقاء بيانات الخامس. جرّب السادس وتحقق من تحديث الإصدار والحقول المرتبطة في العملية نفسها. ثم أرسل السادس مرة أخرى واختبر قرار المساواة. إذا كانت نسخة مساوية تحمل بيانات مختلفة، سجل الحالة للمراجعة بدل قبولها على أساس ترتيب الوصول.
اقرأ RETURNING ضمن عقد العملية
يوضح مرجع PostgreSQL أن الصف لا يظهر في RETURNING إذا لم ينفذ التحديث لأن شرط WHERE لم يتحقق، حتى لو قُفل أثناء تقييم التعارض. عالج النتيجة الفارغة كحالة متوقعة للرسالة المتأخرة أو المكررة في هذا التصميم. لا تستخدمها وحدها لاستنتاج محتوى السجل الحالي أو تسجيل نجاح كتابة لم تحدث.
راجع المدخلات التي لا تقارن مباشرة
عند استيراد دفعة، افحص تكرار الهوية داخل الدفعة نفسها، إذ لا تسمح العبارة بتحديث الصف نفسه أكثر من مرة في استدعاء واحد. اختبر أيضًا تعارض معرفات بين مؤسستين، ورسالة بلا إصدار، ومسارين يرسلان تحديثين في الوقت نفسه. سجّل القيم النهائية بعد التجربة حتى يكون دليل القبول مرتبطًا بحالة البيانات.
يمكن تطبيق الاختبارات ضمن تطوير أنظمة الشركات وأنظمة ERP.
المرجع الفني PostgreSQL INSERT.
صورة توضيحية أصلية مرتبطة بالمثال.




