مشاكل الوصول إلى قاعدة البيانات بعد الترقية v3.5.2 -> v3.6.0.beta2

  • v3.5.2 → v3.5.2
  • v3.6.0.beta2 → v3.6.0.beta2

هذا الموضوع أوصلني إلى هنا: Upgrade failed. Database stopped. (multisite install)

لدي الآن مشاكل في الوصول إلى قاعدة البيانات:


2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse LOG:  اسم المستخدم المقدم (postgres) واسم المستخدم المصادق عليه (discourse) غير متطابقين
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse FATAL:  فشلت مصادقة النظير للمستخدم "postgres"
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse DETAIL:  اتصال مطابق لسطر pg_hba.conf رقم 89: "local   all             postgres       
                        peer"
postgres=# \l
قائمة قواعد البيانات
الاسم     |  المالك   | الترميز | مزود اللغة |   اللغة   |    النوع    | لغة ICU | قواعد ICU |   امتيازات الوصول
-------------±---------±---------±----------------±------------±------------±-----------±----------±----------------------
b_discourse | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
c_discourse | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
discourse   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
postgres    | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
template0   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres           +
|          |          |                 |             |             |            |           | postgres=CTc/postgres
template1   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres           +
|          |          |                 |             |             |            |           | postgres=CTc/postgres
(6 صفوف)


تغير multisite.yaml بين هذين الإصدارين.

الأصلي:
secondsite:
adapter: postgresql
database: b_discourse
pool: 25
timeout: 5000
db_id: 2
host_names:
- ``forum.domain.com

الجديد:
mlp:
adapter: postgresql
database: discourse_mlp
username: discourse_mlp
password: applejack
host: dbhost
pool: 5
timeout: 5000
host_names:
- discourse.nudderdomain.com
- discourse.nudderdomain.internal

لم أقم أبدًا بتعيين أي كلمات مرور أو مستخدمين للمواقع المتعددة لأنه لم يكن مطلوبًا أو مدرجًا في القالب الأصلي عند إعدادها.

في البداية، لم أتمكن من الترقية لأن الموقع المتعدد فشل بسبب أذونات على الموقعين المدرجين في multisite.yml. إضافة postgres كمستخدم إلى multisite.yml لم ينجح في الترحيل. الآن أرى ربما كان يجب أن أجرب discourse؟

هل سيؤدي تغيير المالك إلى discourse إلى إصلاحه؟ هل أحتاج إلى إضافة مستخدمين وكلمات مرور للمواقع المتعددة لجعلها تتطابق مع الحالي؟

ما هو أفضل حل طويل الأجل هنا.

منشورك صعب القراءة للغاية، لذلك قمت بإلغاء إدراجه. يرجى إصلاح التنسيق ويمكنني إدراجه مرة أخرى.

إعجابَين (2)

للأسف، بذلت قصارى جهدي لجعله مفهوماً/متماسكاً قدر الإمكان.

أنا أعرف ما أعنيه. :wink:

تعديل: حسناً، فهمت. المنتدى الآخر الذي أستخدمه مختلف قليلاً. أستخدم ثلاثة علامات اقتباس على السطر قبل وبعد الكتلة. الآن أرى ما يحدث. هذا الأول من علامات الاقتباس يُدخل نافذة للصق فيها. لم أستطع فهم سبب عدم عمل علامات الاقتباس الثلاثية و \u003c/\u003e لم يعطني ما أردته حقاً.

إعجاب واحد (1)

يمكنك التبديل إلى محرر markdown إذا كنت بحاجة إلى القيام بالكثير من الأشياء باستخدام markdown في منشورك.

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

هل اتبعت هذه التعليمات؟ (لا يبدو أنك فعلت؟)

هذا رهان جيد جدًا، ولكن تأكد من أن لديك أشياء مثل الموجودة في موضوع التثبيت متعدد المواقع.

إذا كانت مواقعك تعمل الآن، فأنا أشجعك أيضًا على إجراء تثبيت نظيف متعدد المواقع ونسخ/استعادة قواعد البيانات. يمكنك نسخ كل الأشياء الأخرى كما هو موضح في نقل موقع Discourse إلى VPS آخر باستخدام rsync

تساءلت لماذا سميت قواعد بياناتي b_discourse و c_discourse. الآن أعرف السبب. :wink:

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
  after_postgres:
     - exec: sudo -u postgres createdb b_discourse || exit 0
     - exec:
          stdin: |
            grant all privileges on database b_discourse to discourse;
          cmd: sudo -u postgres psql b_discourse
          raise_on_fail: false

     - exec: sudo -u postgres createdb c_discourse || exit 0
     - exec:
          stdin: |
            grant all privileges on database c_discourse to discourse;
          cmd: sudo -u postgres psql c_discourse
          raise_on_fail: false

     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse << "alter schema public owner to discourse;"'
     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse << "create extension if not exists hstore;"'
     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse << "create extension if not exists pg_trgm;"'

لا أفهم تمامًا كيف يتم منح الامتيازات لذلك تساءلت عن هذه. (لقطة شاشة من الأعلى لقاعدتي بيانات إشكالية):

حسناً، أخبار سارة وأخبار سيئة. :frowning:
نريد الآن :frowning:

2025-11-07 18:05:41.555 UTC [4724] discourse@b_discourse ERROR:  must be owner of extension vector
2025-11-07 18:05:41.555 UTC [4724] discourse@b_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO '0.8.0';
2025-11-07 18:05:41.752 UTC [4725] discourse@c_discourse ERROR:  must be owner of extension vector
2025-11-07 18:05:41.752 UTC [4725] discourse@c_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO '0.8.0';

بدلاً من

ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

ولكن:

b_discourse=# ALTER EXTENSION vector UPDATE TO '0.8.0';
ERROR:  extension "vector" has no update path from version "0.7.4" to version "0.8.0"

كنت متردداً بشأن مجرد تغيير المالكين على قواعد البيانات ولكني أعتقد أن هذا قد يكون الخطوة التالية.

هل هناك طريقة لجعل ./launcher يتصل كمستخدم postgres؟ يبدو أن هذا سيحل جميع مشاكلي المتعلقة بالترقية هنا.

b_discourse=# select e.extname, u.usename 
             from pg_extension e 
             join pg_user u on e.extowner = u.usesysid;
 extname  |  usename  
----------+-----------
 plpgsql  | postgres
 hstore   | postgres
 pg_trgm  | postgres
 unaccent | discourse
 vector   | postgres
(5 rows)

يبدو أن هناك “مشاكل” في مجرد محاولة تغيير مالك الامتداد. أول إشارة وجدتها كانت في عام 2017 وفي عام 2022 لم يتم تنفيذها بعد.

لقد استخدمت apt لتثبيت الامتداد الجديد ونجحت في تشغيله. يا إلهي. الآن سأقوم بعمل نسخ احتياطية مناسبة وتحديث إلى Postgres 15. ولكن ليس الليلة. :wink:

يبدو أن سجلي قد تم مسحه لذا لا يمكنني إخبارك بالضبط كيف فعلت ذلك ولكن كن حذرًا. يتطلب postgres 13 وسيُحاول إعادة تثبيته.

ملاحظة: اتضح أنني قمت بتشغيل النسخ الاحتياطي التلقائي ولكنني نسيت أمرها. ليس أنني كنت أعرف مكانها. سأقوم بإعداد عملية rsync لوضعها في الدليل الذي أقوم فيه بنسخ احتياطي لخوادمي الأخرى أيضًا.

إعجابَين (2)