أثناء الترقية، كنت أواجه
إيقاف خادم قاعدة بيانات PostgreSQL 15: mainError: مالك التكوين (postgres:101) ومالك البيانات (runit-log:999) غير متطابقين، ومالك التكوين ليس root … فشل!
فشل!
تعذر فتح ملف الإصدار " /shared/postgres_data/PG_VERSION ": رفض الإذن
فشل، جارٍ الخروج
والذي تم حله عن طريق
sudo ./launcher enter app
ثم
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /shared/postgres_run
chmod -R 700 /shared/postgres_data
أنا في حلقة لا نهائية، تم تحديث قاعدة البيانات بشكل جيد ولكن عندما أقوم بتشغيل ./launcher rebuild app فإنها تستمر في الدوران، الشيء الوحيد الذي يمكنني رؤيته هو ما يلي:
تحرير: وجدت هذه الرسالة…
mv: فشلت عملية النقل بين الأجهزة: '/shared/postgres_data_new' إلى '/shared/postgres_data/postgres_data_new'؛ تعذر إزالة الهدف: الدليل غير فارغ
يحتوي تثبيتك على امتدادات يجب تحديثها
باستخدام أمر ALTER EXTENSION. الملف
update_extensions.sql
عند تشغيله بواسطة psql بواسطة المستخدم الخارق لقاعدة البيانات سيقوم بتحديث
هذه الامتدادات.
يرجى تقديم المشورة
اكتملت الترقية
----------------
لم يتم نقل إحصائيات المحسن بواسطة pg_upgrade.
بمجرد بدء تشغيل الخادم الجديد، ضع في اعتبارك تشغيل:
/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
سيؤدي تشغيل هذا البرنامج النصي إلى حذف ملفات بيانات الكتلة القديمة:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
اكتملت ترقية POSTGRES
تم تخزين قاعدة بيانات 13 القديمة في /shared/postgres_data_old
لإكمال الترقية، أعد البناء مرة أخرى باستخدام:
./launcher rebuild app
-------------------------------------------------------------------------------------
حسنًا، يبدو أن هذه هي المشكلة هنا:
هذه موجودة في shared/standalone/ وتم نقلها يدويًا بالفعل…
mv: تعذر نقل '/shared/postgres_data' إلى '/shared/postgres_data_old': الجهاز أو المورد مشغول
mv: فشلت عملية النقل بين الأجهزة: '/shared/postgres_data_new' إلى '/shared/postgres_data/postgres_data_new'؛ تعذر إزالة الهدف: الدليل غير فارغ
I, [2025-02-08T15:22:42.078189 #1] INFO -- : توليد اللغات المحلية (قد يستغرق هذا بعض الوقت)...
لا يبدو أن أي حل يعمل. هذا محبط للغاية.
سيكون من الغريب جدًا أن يعرض شخص ما مثل هذه الخدمة دون أن يُطلب منه ذلك أولاً.
إذا كنت ترغب في توظيف شخص ما، فهذا هو المكان المناسب للذهاب: Marketplace - Discourse Meta
تعذر تشغيل مثيلنا متعدد المواقع بعد الترقية. وذكر:
يحتوي تثبيتك على امتدادات يجب تحديثها
باستخدام أمر ALTER EXTENSION. الملف
update_extensions.sql
عند تنفيذه بواسطة psql بواسطة المستخدم الخارق لقاعدة البيانات سيقوم بتحديث
هذه الامتدادات.
لا يمكنني العثور على ملف update_extensions.sql في أي مكان. أين يمكن أن يكون موجودًا؟
تحقق من هذا
mv: لا يمكن نقل '/shared/postgres_data' إلى '/shared/postgres_data_old': الجهاز أو المورد مشغول
mv: فشلت عملية النقل بين الأجهزة: '/shared/postgres_data_new' إلى '/shared/postgres_data/postgres_data_new'؛ تعذر إزالة الهدف: الدليل غير فارغ
I, [2025-02-08T15:22:42.078189 #1] INFO -- : إنشاء المواقع (قد يستغرق هذا بعض الوقت)...
كنت أنا. أقدم المساعدة عندما يبدو أن شخصًا ما في موقف سيكون من الصعب حله بمساعدة هنا.
سؤال فضولي.
هل هناك معيار أو استراتيجية متعلقة بترقيات المكونات الرئيسية، مثل Postgres؟
أرى أن دعم Postgres 13 استمر حتى 25/11، وأن الإصدار 15 يستمر حتى عام 2027، والإصدار الحالي هو 17.
أتطلع حقًا إلى التعلم والفهم. تغيير إصدارات قاعدة البيانات هو بشكل عام أمر كبير ويتطلب جهدًا كبيرًا.
شكرا!
لقد كنت موجودًا منذ إصدار بوستجريز 10. عادةً ما يترقون كل إصدارين، على الرغم من أنهم انتقلوا من 12 إلى 13 لأنه كان هناك بعض التحسينات التي جعلت الترقية المبكرة مجدية. كنت مندهشًا قليلاً أنهم لم يذهبوا إلى 16.
عادةً ما تسير الأمور بسلاسة إذا كان لديك مساحة كافية على القرص الصلب ودوكر حديث.
لقد عدت إلى القالب 13 حتى يتم إصلاح المشكلة، شكرًا
لقد قمت بحل المشكلة التي واجهتني مع ترقية PostgreSQL من الإصدار 13 إلى 15، بعد استعادة الخادم الذي فشلت فيه الترقية من النسخ الاحتياطية، نجحت الخطوات التالية معي مع إعدادات اللغة en_GB.UTF-8 الخاصة بـ PostgreSQL:
sudo -i
su - discourse
cd /var/discourse
git stash
git stash drop
git pull
./launcher stop app
docker run --rm \
--entrypoint=/bin/bash \
-e LANG='en_GB.UTF-8' \
-v /var/discourse/shared/standalone/postgres_data:/var/lib/postgresql/13/data \
-v /var/discourse/shared/standalone/postgres_data_new:/var/lib/postgresql/15/data \
tianon/postgres-upgrade:13-to-15 \
-c 'sed -i "s/^# $LANG/$LANG/" /etc/locale.gen && locale-gen &&
apt-get update && apt-get install -y postgresql-13-pgvector postgresql-15-pgvector &&
docker-upgrade'
exit
mv /var/discourse/shared/standalone/postgres_data /var/discourse/shared/standalone/postgres_data_old
mv /var/discourse/shared/standalone/postgres_data_new /var/discourse/shared/standalone/postgres_data
chown -R 101:104 /var/discourse/shared/standalone/postgres_data
su - discourse
cd /var/discourse
docker run --rm -v /var/discourse/shared/standalone:/shared \
local_discourse/app chown -R postgres:postgres /shared/postgres_data
./launcher rebuild app
كنت بحاجة إلى إزالة التغييرات المحلية التي تم إجراؤها في الماضي على PostgreSQL LANG باستخدام git stash; git stash drop وكان نقل مجلدات بيانات PostgreSQL بحاجة إلى أن يتم كـ root وكان هناك حاجة إلى chown.
هل git pull مطلوب هذه المرة؟ عادةً لا يكون كذلك.
لم تعد هناك حاجة إليها في الوقت الحاضر، لأن إعادة البناء تقوم بذلك.
تشير الرسالة اللاحقة Device or resource busy من الخطأ الأول إلى أن شيئًا آخر يحتفظ بقفل على دليل postgres_data هذا بحيث لا يمكن نقله.
نظرًا لأن هذا هو دليل قاعدة البيانات، فإن أحد التفسيرات المحتملة هو أن postgres_data قد يكون نقطة تحميل (mount point). وهذا أكثر احتمالاً لأننا نرى inter-device move failed في أمر mv الثاني، مما يعني أن shared/postgres_data_new و shared/postgres_data موجودان على أقراص/أقسام مختلفة.
إذا كنت تؤكد أن postgres_data هو نقطة تحميل، فسيتعين عليك نقل جميع الملفات يدويًا من postgres_data إلى دليل نسخ احتياطي آخر، ثم نقل جميع الملفات من داخل postgres_data_new إلى دليل postgres_data (الفارغ الآن). يجب إجراء كلا النقلين بعد اكتمال إعادة البناء الأولى مع UPGRADE OF POSTGRES COMPLETE ولكن قبل إصدار الثاني.
إذا لم يكن postgres_data نقطة تحميل، فإن lsof هو صديقك. يمكنك استخدامه لمحاولة تحديد ما الذي يسبب القفل.
بالطبع، قم بعمل نسخ احتياطية ضرورية أولاً.
هذا مثالي، شكرًا لك.
كانت الملفات في المجلد التالي:
/var/postgres_data_discourse باسم postgres_data_new
قام ما يلي بإصلاحه.
لقد نقلت postgres_data_new إلى /var
أعدت تسمية postgres_data_discourse إلى postgres_data_discourse_old
أعدت تسمية postgres_data_new إلى postgres_data_discourse
أصدرت ./launcher rebuild app
شكرًا مرة أخرى ![]()
لدي 62 جيجابايت من قاعدة البيانات، ماذا تقترح لتحقيق أفضل ترقية؟
62G /var/discourse/shared/standalone/postgres_data
أوصي بنقلك إلى جهاز افتراضي جديد، وتشغيل نسخة جديدة من Discourse، مع قاعدة بيانات فارغة (مع نسخ دليْلات ssl و letsencrypt إذا كنت ترغب في تبديل بدون توقف) واستعادة قاعدة البيانات الحالية إلى الخادم الجديد. يتيح لك هذا إجراء الترقية بدون توقف وبدون أي مخاطر بأن شيئًا ما قد يسوء.
ربما لم يفت الأوان لترقية نظام التشغيل الخاص بك على أي حال.
هذه فكرة جيدة.
هل يمكنني نقل النسخة الاحتياطية من ### 3.4.0.beta4-dev إلى ### أحدث إصدار تثبيت جديد؟
إذا كنت تسأل عما إذا كان بإمكانك استعادة أي إصدار قديم من Discourse إلى أي إصدار جديد من Discourse قد تحصل عليه، فالجواب هو نعم.