سلوك غير متوقع في PostgreSQL: CTE و DELETE و LIMIT
2025-05-04
ظهر سلوك غير متوقع في PostgreSQL عند استخدام تعبير الجدول المشترك (CTE) مع DELETE ... RETURNING و LIMIT لمعالجة مجموعة من العناصر. كانت النية هي حذف صف واحد فقط، لكن تم حذف صفوف متعددة. كشف `EXPLAIN ANALYZE` عن تحسين انضمام شبه مُضمَّن مُتداخِل، مما تسبب في تنفيذ شرط LIMIT 1 عدة مرات. كان الحل هو إعادة هيكلة الاستعلام، وتجنب CTE واستخدام استعلام فرعي مباشرة في شرط WHERE لـ DELETE. هذا يبرز أن CTEs لا تمنع دائمًا تحسينات خطة الاستعلام، وأن فحصًا دقيقًا للخطة أمر بالغ الأهمية للعمليات الحرجة.
التطوير
تحسين الاستعلام