سؤال

ولدي دورة (SQLAlchemy) على الإنترنت، مع معاملة غير ملتزم النشطة. لقد مرت للتو الدورة إلى بعض شجرة الدعوة قد تكون أو لا تكون أصدرت بيانات INSERT / UPDATE / DELETE SQL، من خلال sqlalchemy.orm أو مباشرة من خلال الاتصال الأساسي.

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

ورأيت الناس يشيرون v$transaction في أوراكل لنفس الشيء (انظر <لأ href = "https://stackoverflow.com/questions/1299694/oracle-how-to-find-out-if-there- هو واحد في انتظار المعاملات "> هذا السؤال SO ). أنا أبحث عن شيء مماثل لاستخدامها في كيو.

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

المحلول

وتبدأ من خلال التدقيق في عرض نظام pg_locks.

http://www.postgresql.org/docs/ 8.4 / تفاعلي / عرض-PG-locks.html

نصائح أخرى

والنظر في التسلسل التالي من البيانات:

select txid_current();

begin;

select txid_current();

إذا هوية الصفقة التي تم إرجاعها بواسطة يختار اثنين يساوي، ثم هناك معاملة مفتوحة. إذا لم يكن ثم لم يكن هناك، (ولكن الآن هو).

إذا كانت الأرقام مختلفة، ثم كأثر جانبي سوف فقط فتحت الصفقة، التي سوف ربما تريد إغلاقه.

<القوي> UPDATE : في واقع الأمر، و @r2evans يشير إلى (! شكرا لالبصيرة)، لا تحتاج إلى "بدء" - txid_current () سيعود نفس العدد فقط إذا كنت هي في معاملة.

لا، ليس من مستوى قاعدة البيانات، حقا. ربما يمكنك إضافة بعض اقتفاء أثر على مستوى sqlalchemy لتتبع ذلك؟

وأيضا، كيف يمكن تحديد أي المرجع؟ ماذا لو قمت بتحديث قيمة إلى نفس القيمة التي كان من قبل، هو أن أي المرجع أم لا؟ من وجهة نظر قواعد البيانات، وإذا كان واحد، فإنه لن يكون أي المرجع. ولكن من منظور التطبيق، فإنه على الارجح.

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