أحاول استعادة قاعدة بيانات تم إنشاؤها على \"Discourse 2.9.0.beta10 - https://github.com/discourse/discourse version 8d3fe3ddc5d38ab02a8f5c6aed7ebf7a6bcfbfec\"\u003e
واستعادتها إلى Discourse 2.9.0.beta12 - https://github.com/discourse/discourse version d4371a9ffcc6c727105a880b4b70c715ed0283cb\"\u003e. كلاهما يستخدم RDS Postgres 13.7. قاعدة البيانات غير المضغوطة بحجم 126 جيجابايت، لذلك بعد قضاء يومين في الاعتقاد بأنني بحاجة إلى قرص بحجم 200 جيجابايت لتشغيل هذه الاستعادة لقاعدة البيانات المضغوطة بحجم 30 جيجابايت، أحصل على هذا:
...
SET
CREATE TYPE
ERROR: function "entity2char" already exists with same argument types
EXCEPTION: psql failed: ERROR: function "entity2char" already exists with same argument types
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
...
البحث عن "entity2char" already exists لا يعثر على شيء ولا أرى entity2char في النواة أو أي من الإضافات. ولا أراها في retort أيضًا، والتي كنت آمل في إلقاء اللوم عليها، لكن إزالتها لم تساعد.
يبدو أن تفريغ قاعدة البيانات يحتوي على مرجع لدالة entity2char لسبب ما. إزالتها يجب أن تجعلها تعمل ما لم يكن هناك أشياء أخرى في التفريغ لا ينبغي أن تكون هناك.
كنت على بعد ثوانٍ من حذفه من قاعدة البيانات، حيث يبدو أنه من الأسهل بكثير القيام بأي شيء لدى SQL لـ
drop function entity2char;
تمكنت من سردها باستخدام \\df
هل تعتقد أنه إذا قمت بإزالته من قاعدة البيانات فسوف يتسبب ذلك في تعطل شيء ما؟
انتظر. . . . والنقطة من هذا التمرين لاستعادة قاعدة بيانات الإنتاج إلى الصورة الجديدة التي أود إطلاقها هي التأكد من أن discourse سيعمل مع قاعدة بيانات الإنتاج الحالية عند تثبيت أحدث إصدار من Discourse وترحيل قاعدة البيانات، لذلك فإن تعديل قاعدة البيانات لاستعادتها على مرحلة الاختبار لا معنى له.
أوه! إذن المشكلة هي أن قاعدة البيانات الخاصة بالمرحلة تحتوي بالفعل على هذه الدالة، والنسخة الاحتياطية تحتوي أيضًا على هذه الدالة وهي غبية جدًا لدرجة أنها لا تفهم أنها نفس الدالة.
ربما يجب علي فقط إسقاط قاعدة البيانات وإنشائها في موقع المرحلة/الهدف؟
لكن فكرتك تبدو أسهل قليلاً.
تعديل: حسنًا، لقد أعدت تسمية الدالة وأقوم بالاستعادة الآن. في غضون ساعة تقريبًا، يمكنني معرفة ما إذا كانت قد نجحت.
والقلق هو أن دالة entity2char التي يتم نقلها مع النسخة الاحتياطية لن تعمل بطريقة ما مع قاعدة البيانات الموجودة؟ ربما يجب علي فقط إنشاء قاعدة بيانات جديدة تمامًا واستعادتها إليها. أنا لست من المعجبين الحقيقيين بالاسم xx-discourse-database-5 على أي حال.
تعديل: حسنًا، يبدو أن هناك المزيد من المشاكل التي سأحتاج إلى معالجتها.
ERROR: function "replace_mentions" already exists with same argument types