سؤال

لدي وظيفة تشغيل طويلة يجب أن تدرج صفوف جديدة. كيف يمكنني التحقق من تقدم هذه الوظيفة؟

كنت أفكر في القراءات القذرة سوف تعمل لذلك قرأت http://www.postgresql.org/docs/8.4/Irtive/SQL-Set-Transaction.html. وتوصل إلى التعليمة البرمجية التالية وركضها في جلسة جديدة:


SET SESSION CHARACTERISTICS AS SERIALIZABLE;

SELECT * FROM MyTable;

Postgres يعطيني خطأ في بناء الجملة. ما الخطأ الذي افعله؟ إذا أفعل ذلك بشكل صحيح، فهل أرى السجلات المدرجة في حين أن هذه الوظيفة الطويلة لا تزال تعمل؟

شكرا

هل كانت مفيدة؟

المحلول

لا ينفذ postgresql وسيلة لك لرؤية هذا من خارج الوظيفة، ويعرف أيضا باسم READ UNCOMMITTED مستوى العزلة. خياران الأساسيان الخاص بك هي:

  • لديك وظيفة استخدام RAISE NOTICE بين الحين والآخر لإظهار مدى طولك
  • استخدم شيئا مثل DBLink من الوظيفة مرة أخرى إلى نفس قاعدة البيانات، وتحديث جدول عداد من هناك. نظرا لأن هذه معاملة منفصلة تماما، فإن العداد سيكون مرئيا بمجرد أن تلتزم هذه المعاملة - لا تضطر إلى الانتظار حتى تنتهي المعاملة الرئيسية (حول مكالمة الوظيفة).

نصائح أخرى

عزل المعاملات postgresql

في postgresql، يمكنك طلب أي من مستويات عزل المعاملات الأربعة المعيارية. لكن داخليا، لا يوجد سوى مستويين عزلان متميزان، تتوافق مع المستويات التي يرتكبها ارتكابها وتسلسلت. عند تحديد مستوى قراءة المستوى غير الملتزم به، يمكنك حقا قراءة التعليقات، وعند تحديد قراءة قابلة للتكرار، يمكنك حقا الحصول على Serializable، لذلك قد يكون مستوى العزلة الفعلي أكثر صرامة مما تحدده. هذا مسموح به بواسطة معيار SQL: تحدد مستويات العزلة الأربعة فقط الظواهر التي يجب ألا تحدث هذه الظواهر، فهي لا تحدد الظواهر التي يجب أن تحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top