فشل الترقية. توقف قاعدة البيانات. (تثبيت متعدد المواقع)

لقد سجلت الدخول. لم أقم بالتحديث منذ 11 شهرًا. بدأت بمحاولة ترقية Docker Manager. لم يبدو أنها تكتمل أبدًا. في اليوم التالي، أصبحت صفحة المسؤول معطلة تقريبًا. حاولت تشغيل ./launcher rebuild app. أحصل على

2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse ERROR:  must be owner of extension vector
2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

لكن قاعدة البيانات متوقفة، لذا فإن الإصلاحات التي رأيتها لا تعمل.

2025-10-31 00:27:40.021 UTC [662] FATAL:  database files are incompatible with server
2025-10-31 00:27:40.021 UTC [662] DETAIL:  The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 13.16 (Debian 13.16-1.pgdg120+1).

لكن

root@main-app:/var/lib/postgresql# pg_config --version
PostgreSQL 16.4 (Debian 16.4-1.pgdg120+1)

تعديل: يبدو أن قاعدة البيانات لا تزال بتنسيق 13؟

root@main-app:/var/lib/postgresql# ls
13  take-database-backup

إذا لم تكن قد اطلعت على الموضوع تحديث PostgreSQL 15 - إعلانات، فقد تبدأ من هناك. يناقش عددًا من المشكلات والتوصيات.

إعجابَين (2)

شكرا. هناك الكثير مما يمكن استيعابه حقًا ولكنه لا يبدو أن أيًا منها يمثل مشكلتي. :frowning: يبدو أن قاعدة البيانات تعمل أثناء عملية إعادة البناء وهو الجزء الغريب. على الأقل مما يمكنني استنتاجه من الأشياء التي تمر.

هذا غالبًا لن ينجح أبدًا بعد 11 شهرًا.

تحتاج بالتأكيد إلى إجراء ترقية postgres 15، وهذا جزء مما هو خاطئ. من الممكن أن يتم التبديل إلى postgres 13 وتشغيل الأمور مرة أخرى قبل إجراء الترقية.

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

هل هذا تثبيت قياسي؟

ليس إذا كان التثبيت المتعدد المواقع لا يزال يعتبر غير مدعوم.
تبدو المشكلة عندما قمت بتثبيته ولم يكن هناك مستخدم/كلمة مرور متصلة بقواعد البيانات الفردية. يبدو أن هذا يتغير. هذا هو المكان الذي تكمن فيه المشكلة. لقد حاولت التلاعب بها قليلاً عن طريق إضافة مستخدم ثم مستخدم بكلمة مرور فارغة ولكن ذلك لم يساعد.
تكويني مقابل التكوين النموذجي الجديد:


secondsite:
adapter: postgresql
database: b_discourse

pool: 25
timeout: 5000
db_id: 2
host_names:

mlp:
adapter: postgresql
database: discourse_mlp
username: discourse_mlp
password: applejack
host: dbhost
pool: 5
timeout: 5000

host_names:

هل يعني هذا أن قاعدة البيانات تبدأ بالفعل أثناء عملية التثبيت؟

2025-10-31 15:14:30.984 UTC [45] LOG:  starting PostgreSQL 15.14 (Debian 15.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0
-14+deb12u1) 12.2.0, 64-bit
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv4 address “0.0.0.0”, port 5432
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv6 address “::”, port 5432
2025-10-31 15:14:31.055 UTC [45] LOG:  listening on Unix socket “/var/run/postgresql/.s.PGSQL.5432”
2025-10-31 15:14:31.135 UTC [56] LOG:  database system was shut down at 2025-10-31 02:08:49 UTC
2025-10-31 15:14:31.199 UTC [45] LOG:  database system is ready to accept connections
I, [2025-10-31T15:14:35.760150 #1]  INFO – :
I, [2025-10-31T15:14:35.760557 #1]  INFO – : > /usr/local/bin/create_db
2025-10-31 15:14:35.912 UTC [63] postgres@postgres ERROR:  database “discourse” already exists
2025-10-31 15:14:35.912 UTC [63] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse ERROR:  role “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role “discourse” already exists
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
I, [2025-10-31T15:14:37.265035 #1]  INFO – : GRANT
ALTER SCHEMA
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
UPDATE 0

I, [2025-10-31T15:14:37.265325 #1]  INFO – : > echo postgres installed!
I, [2025-10-31T15:14:37.270967 #1]  INFO – : postgres installed!

I, [2025-10-31T15:14:37.271578 #1]  INFO – : > sudo -u postgres createdb b_discourse || exit 0
2025-10-31 15:14:37.380 UTC [104] postgres@postgres ERROR:  database “b_discourse” already exists
2025-10-31 15:14:37.380 UTC [104] postgres@postgres STATEMENT:  CREATE DATABASE b_discourse;
createdb: error: database creation failed: ERROR:  database “b_discourse” already exists
I, [2025-10-31T15:14:37.385149 #1]  INFO – :
I, [2025-10-31T15:14:37.385968 #1]  INFO – : > sudo -u postgres psql b_discourse
I, [2025-10-31T15:14:37.390476 #1]  INFO – : grant all privileges on database b_discourse to discourse;

I, [2025-10-31T15:14:37.515870 #1]  INFO – : > sudo -u postgres createdb c_discourse || exit 0
2025-10-31 15:14:37.625 UTC [111] postgres@postgres ERROR:  database “c_discourse” already exists
2025-10-31 15:14:37.625 UTC [111] postgres@postgres STATEMENT:  CREATE DATABASE c_discourse;
createdb: error: database creation failed: ERROR:  database “c_discourse” already exists
I, [2025-10-31T15:14:37.629387 #1]  INFO – :
I, [2025-10-31T15:14:37.630145 #1]  INFO – : > sudo -u postgres psql c_discourse
I, [2025-10-31T15:14:37.634672 #1]  INFO – : grant all privileges on database c_discourse to discourse;

I, [2025-10-31T15:14:37.758171 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<EOF “alter schema public owner to discourse;”’
I, [2025-10-31T15:14:37.876557 #1]  INFO – : ALTER SCHEMA

I, [2025-10-31T15:14:37.877104 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<EOF “create extension if not exists hstore;”’
NOTICE:  extension “hstore” already exists, skipping
I, [2025-10-31T15:14:37.997465 #1]  INFO – : CREATE EXTENSION

I, [2025-10-31T15:14:37.998029 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<EOF “create extension if not exists pg_trgm;”’
NOTICE:  extension “pg_trgm” already exists, skipping
I, [2025-10-31T15:14:38.117879 #1]  INFO – : CREATE EXTENSION


امتداد Pgvector قديم أو غير مُعد على إحدى قواعد بياناتك. واجهت هذا في عدد قليل من التثبيتات قبل بضعة أشهر. من السهل جدًا حل هذه المشكلة، ما عليك سوى تحديثه.

ادخل إلى حاوية قاعدة البيانات، وقم بتشغيل psql بصفتك discourse (أو أيًا كان مالك قاعدة بياناتك)، ثم اختر كل قاعدة بيانات وقم بتشغيل

ALTER EXTENSION vector UPDATE;

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

يبدو أن مالك الامتداد لقاعدة بيانات c_discourse ليس المستخدم discourse - ستحتاج إلى التحقق لمعرفة من هو المالك، على سبيل المثال:

discourse_development=# select extname, extowner, usename, extversion from pg_extension JOIN pg_user on pg_extension.extowner = pg_user.usesysid;
 extname  | extowner | usename  | extversion 
----------+----------+----------+------------
 vector   |    16385 | michael  | 0.8.0
 unaccent |       10 | postgres | 1.1
 pg_trgm  |       10 | postgres | 1.6
 hstore   |       10 | postgres | 1.8
 plpgsql  |       10 | postgres | 1.0

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

إعجابَين (2)

هل هناك أي مساعدة حول كيفية بدء قاعدة البيانات للقيام بذلك؟ هذه هي نقطة التعثر حقًا.

تحرير: الملفات الوحيدة لـ postgres التي أجدها هي من الإصدار /13. لذا أنا في حالة من الجمود. يبدو أن برنامج قاعدة البيانات تمت ترقيته ولكن ملفات قاعدة البيانات لم تفعل ذلك. لقد أجريت بعض عمليات البحث ولكن لا شيء أشعر بالراحة تجاهه بخلاف محاولة نسخ الملفات للخارج واللعب بها.

2025-10-31 00:27:40.021 UTC [662] FATAL: database files are incompatible with server
2025-10-31 00:27:40.021 UTC [662] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 13.16 (Debian 13.16-1.pgdg120+1).

يجب أن تكون قادرًا على تعديل ملف app.yml واستخدام قالب postgres 13 وإعادة البناء، كما هو موضح في موضوع تحديث PostgreSQL 15.

بعد ذلك، يمكنك إعادة البناء. ثم يمكنك بدء الحاوية. ثم يمكنك الدخول إلى الحاوية. ثم يمكنك القيام بأشياء pgvectkr.

حسنًا، لقد تم حذف 15 وتثبيت 13، ولكن الغريب هو نفس الخطأ. لقد تعطلت العملية في وقت أقرب بكثير من البداية. :frowning:

2025-11-01 15:30:26.522 UTC [2547] FATAL: database files are incompatible with server
2025-11-01 15:30:26.522 UTC [2547] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this versio
n 13.22 (Debian 13.22-1.pgdg12+1).

هذه هي نقطة الفشل:
2025-11-01 15:30:26.522 UTC [2547] FATAL: database files are incompatible with server
2025-11-01 15:30:26.522 UTC [2547] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this versio
n 13.22 (Debian 13.22-1.pgdg12+1).

لقد جربت قالب 13. المشكلة هي أن قاعدة البيانات قد تم تعديلها بالفعل بواسطة الإصدار 15، ولكن ترحيل المواقع المتعددة المضافة حديثًا تمت إضافتها بطريقة ما بواسطة مستخدم يبدو أنه غير معترف به من قبل المثبت. كما ذكرت أعلاه، لم يكن هناك شرط لمجموعة اسم المستخدم/كلمة المرور عند إضافتها في البداية، لذا لا أعرف بالضبط كيف تمت إضافتها إلى قاعدة البيانات.

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

هل سيكون من الممكن فقط التعليق على الموقعين المضافين للحصول على قاعدة البيانات وتشغيلها، ثم ربما استخدام أي طريقة استيراد يتم استخدامها الآن؟

إذا نظرت إلى الموضوع pg 15، فسيخبرك بكيفية إعادة تسمية دليل النسخ الاحتياطي الذي لا يزال يحتوي على ملفات pg 13.

هذا خيط طويل لذا دعني أتأكد من أنني أنظر إلى الشيء الصحيح.

  1. استخدم القالب 13
  2. انقل /shared/postgres_data إلى شيء مثل /shared/postgres_data.bak
  3. انقل /shared/postgres_data_old إلى /shared/postgres_data

وهل سيؤدي هذا إلى تشغيل قاعدة البيانات بالنسخة القديمة؟

root@main-app:/shared/postgres_data_old# cat PG_VERSION
13
root@main-app:/shared/postgres_data# cat PG_VERSION
15

ثم سأهتم بـ

لطالما كانت قاعدة البيانات نقطة ضعفي. :frowning: يبدو أن هذا منظم بشكل مختلف عما كنت أعتقده، وهو أن كل هذه الأشياء كانت في /var/lib/posgresql تحت أحد تلك الدلائل الغريبة المرقمة بشكل غير شفاف.

أنا أقدر كل المساعدة. هناك عدد قليل من المنتديات حيث أنا الشخص الذي يهز رأسه عند بعض المستخدمين. :wink:

إذا كنت تقوم ببناء إصدار من discourse يتضمن إضافات مجمعة، فسيفشل البناء مع عدم وجود امتداد pgvector بغض النظر عن إصدار postgres الذي تستخدمه. إذا كنت تستخدم إصدارًا أقدم من postgres، فستواجه مشاكل أكثر مما بدأت به.

آمل أن تكون قد أخذت نسخة احتياطية قبل رحلة الترقية هذه،

أقترح إعداد نسخة discourse جديدة في مكان آخر واستعادة نسختك الاحتياطية. هذه هي الطريقة الموثوقة الوحيدة للخروج من هذا الموقف.

يمكنك القيام بذلك يدويًا أيضًا، ولكن سيتطلب ذلك الكثير من العمل ولن يضمن النتائج.

هل تم دفع إصدار جديد الليلة الماضية؟ أعتقد أنني رأيت بعض عمليات سحب git. على أي حال، العمل مع القالب 13 ونقل البيانات نجح. نوعًا ما. :wink:
بدا أن قاعدة البيانات قد تمت هجرتها بشكل جيد. لا يمكنني العثور على “خطأ المنحة” في الصفحات والصفحات من المخرجات. هذا لا يعني أنه ليس هناك. قد أحتاج إلى تشغيل discourse_doctor حتى يكون لدي مخرجات محفوظة يمكنني البحث فيها عن الأخطاء. قاعدة البيانات قيد التشغيل. لدي الآن خطأ في الصفحة بدلاً من بوابة سيئة في متصفحي. سأضع الجزء الأخير من المخرجات هنا للاكتمال، ولكن إذا لم أجد نفس خطأ المنحة المذكور سابقًا، فسأبدأ موضوعًا جديدًا.

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

مُقدّر للغاية!


== 20240611170904 UpgradePgvector070: migrating ===============================

I, [2025-11-02T15:17:02.281908 #1] INFO -- : Terminating async processes
I, [2025-11-02T15:17:02.282204 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U p
ostgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 2547
I, [2025-11-02T15:17:02.282450 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 2644
2025-11-02 15:17:02.289 UTC [2547] LOG: received fast shutdown request
2644:signal-handler (1762096622) Received SIGTERM scheduling shutdown...
2644:M 02 Nov 2025 15:17:02.299 # User requested shutdown...
2644:M 02 Nov 2025 15:17:02.299 * Saving the final RDB snapshot before exiting.
2025-11-02 15:17:02.384 UTC [2547] LOG: aborting any active transactions
2025-11-02 15:17:02.391 UTC [2547] LOG: background worker \"logical replication launcher\" (PID 2562) exited with exit code 1
2025-11-02 15:17:02.452 UTC [2557] LOG: shutting down
2644:M 02 Nov 2025 15:17:02.549 * DB saved on disk
2644:M 02 Nov 2025 15:17:02.549 # Redis is now ready to exit, bye bye...
2025-11-02 15:17:06.304 UTC [2547] LOG: database system is shut down

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake multisite:migrate failed with return #&lt;Process::Status: pid 4308
exit 1&gt;
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:inspawn’ exec failed with the params “cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate” bootstrap failed with exit code 1 ** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one. ./discourse-doctor may help diagnose the problem. `

EDIT: وجدت هذا في السجلات. لن أفعل أي شيء حتى أقوم بتشغيل doctor والبحث عن الأخطاء.
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse LOG: provided user name (postgres) and authenticated user name (discourse) do not match
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse FATAL: Peer authentication failed for user "postgres"
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse DETAIL: Connection matched pg_hba.conf line 89: "local all postgres
peer"

لإنهاء هذا الموضوع، قمت بتشغيل doctor ووجدت خطأ alter. بما أن قاعدة البيانات كانت تعمل، قمت بتشغيل أمر alter على قواعد البيانات المتضمنة في multisite، وأعدت تشغيل البناء، وتم ترحيلها الآن. لا يزال وصول المستخدم إلى قاعدة البيانات مستمرًا، لكنني سأبدأ موضوعًا آخر لذلك.
مرة أخرى، شكراً للجميع على مساعدتي في الوصول إلى هذه النقطة.

نظرًا لأنني نقلتها بصفتي المستخدم الجذر (root)، اضطررت إلى استخدام chown ثم chmod للملفات. لم أقم بتوثيق هذه الأوامر، لكن مخرجات الخطأ توضح ذلك.

رابط للمشكلة الحالية.

تم دمج مشاركة في موضوع موجود: مشاكل الوصول إلى قاعدة البيانات بعد الترقية v3.5.2 → v3.6.0.beta2