سؤال

Tech Detail

  • الذهاب الإصدار 1.2
  • مكتبة postrgres للذهاب bmizerany / pq

هذه المشكلة تقودني جنون وأنا آمل أن يكون هناك شخص قادر على المساعدة.

قمت بتطوير تطبيق في Golang لقراءة البيانات من قاعدة بيانات Postgres ولكل سجل تقديم طلب HTTP ثم تحديث قاعدة البيانات.

هذا هو كل شيء بسيط بما فيه الكفاية. ومع ذلك، لدينا PGBouncer في المكان. التكوين لدينا ل PGBouncer هو أنه لا يدعم البيانات المعدة. انتقل بصمت جميع الاستعلامات في بيان أعد. الطريقة التي حولها من أجل PGBouncer هي إعداد معاملة. هذا هو كل شيء جيد وجيد للأشياء مثل إدراج / تحديث / حذف.

في حالة عبارة SELECT I AM FORTH IT في المعاملة:

giveacodicetagpre.

(hhmm، يبدو أنه يرمي المسافة البادئة قليلا) الحمار يمكنك أن ترى أنا بدأت bnut لا تغلق المعاملة. يؤدي هذا إلى وجود مشكلة في جانب PG من الأشياء حيث يتم ترك كل تحديد في حالة "الخمول في المعاملة".

لقد حاولت tx.commit () و tx.rollback () وفي كلتا الحالتين أحصل على أخطاء:

giveacodicetagpre.

أو

giveacodicetagpre.

ho هل يمكنني إغلاق المعاملة بنجاح في الذهاب؟ آمل أن أحصل على تحديث PGBouncer.ini للسماح لي بالتبديل إلى Lib / PQ لمكتبة السائق ولكن لست متأكدا مما إذا كان ذلك سيساعد هذه المشكلة مباشرة.

لذلك، كيف يمكنني إغلاق كائن TX بشكل صحيح أو هل هناك طريقة لإجبار عدم استخدام البيانات المعدة تحت غطاء محرك السيارة؟

شكرا ناثان

لقد حاولت تغيير الأمور قليلا:

giveacodicetagpre.

ما أرى في سجلات مع هذا الرمز:

giveacodicetagpre.

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

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

المحلول

لأي شخص آخر يضرب هذا لقد قمت بحل هذا.

الرمز الذي كنت أرجع فيه كائن الصفوف إلى رمز الاتصال (غير موضح) أعلاه.إغلاق المعاملة قبل قراءة الصفوف يبدو أن سبب المشكلة.لا أفهم تماما لماذا يرجى توضيح إذا قمت بذلك.

الآن أعود كل من الصفوف وكائن المعاملة.ثم عندما قرأت جميع الصفوف التي قمت بتثسيت المعاملة.هذا يبقي كل شيء يعمل.

شكرا ناثان

نصائح أخرى

tx.Query إرجاع مثيل SQL.Rows، وهو مؤشر إلى مجموعة النتائج.لم يتم استرجاع البيانات بالضرورة أثناء تكرار هذا المؤشر.يجب أن تظل الصفقة مفتوحة أثناء تكرار المؤشر.

هذا هو السبب في أنه لم يعد بإمكانك تكرار المؤشر بمجرد إغلاق المعاملة.

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