فشل الترقية: UniqueViolation: قيمة المفتاح المكررة تنتهك القيد الفريد "data_explorer_queries_pkey"

فشل التحديث إلى أحدث إصدار اليوم:

FAILED
--------------------
Pups::ExecError: فشل تنفيذ الأمر cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' مع إرجاع #<Process::Status: pid 3194 exit 1>
موقع الفشل: /pups/lib/pups/exec_command.rb:112:in `spawn'
فشل التنفيذ مع المعاملات {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
590cf0611c566ea6df5f70ffdd2cec2359e84eaea29b7abcde77d56288a46370
** فشل التمهيد ** يرجى التمرير لأعلى والبحث عن رسائل الأخطاء السابقة، فقد يكون هناك أكثر من خطأ.

فيما سبق في السجل:

سببه:
PG::UniqueViolation: خطأ: قيمة المفتاح المكررة تنتهك قيد الفريد "data_explorer_queries_pkey"
التفاصيل: المفتاح (id)=(-10) موجود بالفعل.

و

rake aborted!
StandardError: حدث خطأ، تم إلغاء هذا الإجراء وجميع عمليات الهجرة اللاحقة:

خطأ: قيمة المفتاح المكررة تنتهك قيد الفريد "data_explorer_queries_pkey"
التفاصيل: المفتاح (id)=(-10) موجود بالفعل.

لذا، أفترض أنني بحاجة إلى التخلص من المفتاح المكرر data_explorer_queries_pkey.

كيف أفعل ذلك؟

شكرًا لك، لكنني لا أستطيع الدخول إلى التطبيق:

./launcher enter app
استجابة خطأ من الخدمة: الحاوية 694b24a2a235e90456fb0ca770c86ac14bb914ad33ada8a18fc4777a1188d848 غير قيد التشغيل
root@gaoa-discourse:/var/discourse#

وكذلك:

root@gaoa-discourse:/var/discourse# su - postgres
لا توجد إدخال كلمة مرور للمستخدم 'postgres'

إذن، أعد تشغيل الحاوية؟

./launcher start app

ثم تريد أمرًا مثل:

./launcher enter app

ثم:

su postgres -c 'psql discourse'

شكرًا لك! لست متأكدًا من سبب عدم بدء التشغيل في المرة الأولى التي حاولت فيها.

يبدو أن لدي معرف مكرر “10”:

4374 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"group_ids":[],"last_run_at":"2019-10-21T04:03:35.548+00:00"}

4114 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"last_run_at":"2019-02-27T06:17:48.317+00:00"}

لذا أفترض أنني يجب أن أشغل هذا:

DELETE from plugin_store_rows WHERE id = 10

أو هل يجب أن يكون:

DELETE from plugin_store_rows WHERE id = -10

أنا فضولي - أيهما سيتم حذفه بالأمر أعلاه - أول ما يجده أم كلاهما؟

الأرقام في عمود المعرف هي 4374 و 4114. احذف الرقم الأعلى.

لا تشغّل أمر DELETE from plugin_store_rows WHERE id = 10!! وإلا ستحذف الإدخال الخاطئ!

أهلاً، إذن هذا؟

DELETE from plugin_store_rows WHERE id = 4374;

نعم. يجب أن ترى رأس العمود الصحيح في مخرجات استعلام PL/SQL، أليس كذلك؟

الآن بعد أن ذكرت ذلك، نعم. لقد قمت بالتمرير للأسفل لأن المخرجات تبدو كالتالي:

نعم، أيضًا، بشكل عام، يُنصح بتشغيل الأوامر أولاً لمعرفة تأثيرها قبل الالتزام، راجع:

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

نجح الأمر! :tada: شكرًا على التوجيه @merefield.

كان الأمر DELETE الخاص بي يفتقد إلى فاصلة منقوطة مغلقة (تم التحديث أعلاه).

أوه نعم، هذا ما يحدث معي دائمًا :wink: