تحديث PostgreSQL 15

نجاح. يمكنك الآن بدء خادم قاعدة البيانات باستخدام:

    pg_ctlcluster 13 main start

invoke-rc.d: لم يتمكن من تحديد مستوى التشغيل الحالي
invoke-rc.d: رفضت policy-rc.d تنفيذ البدء.
إعداد postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
معالجة المشغلات لـ libc-bin (2.36-9+deb12u9) ...
معالجة المشغلات لـ postgresql-common (267.pgdg120+1) ...
بناء قواميس PostgreSQL من حزم myspell/hunspell المثبتة...
إزالة ملفات القاموس القديمة:
إيقاف خادم قاعدة بيانات PostgreSQL 13: main.
إيقاف خادم قاعدة بيانات PostgreSQL 15: main.
إجراء فحوصات الاتساق
-----------------------------
فحص إصدارات المجموعات                                   موافق

لم يتم إيقاف المجموعة المصدر بشكل نظيف.
فشل، جارٍ الخروج
-------------------------------------------------------------------------------------
فشل ترقية POSTGRES

يرجى زيارة https://meta.discourse.org/t/postgresql-15-update/349515 للدعم.

يمكنك تشغيل ./launcher start app لإعادة تشغيل تطبيقك في هذه الأثناء
-------------------------------------------------------------------------------------


فشل
--------------------
Pups::ExecError: if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi
 فشل مع العودة #<Process::Status: pid 17 exit 1>
موقع الفشل: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
فشل التنفيذ مع المعلمات {"tag"=>"db", "cmd"=>"if [ -f /root/install_postgres ]; then\n  /root/install_postgres && rm -f /root/install_postgres\nelif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then\n  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1\nfi\n"}
فشل التهيئة مع رمز الخروج 1
** فشل في التهيئة ** يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من واحدة.
قد يساعد ./discourse-doctor في تشخيص المشكلة.
cbebd339ee3bd1e246300784f7825042702c1b5032877bfe580cb7f635fb852b

معلومات القرص:

========================================
Discourse 3.4.0.beta3
إصدار Discourse في mydomian: Discourse 3.4.0.beta3
إصدار Discourse في localhost: Discourse 3.4.0.beta3


==================== معلومات الذاكرة ====================
ذاكرة الوصول العشوائي (ميغابايت): 2055

              الإجمالي المستخدم مجاني مشترك ذاكرة التخزين المؤقت/التخزين المؤقت متاح
الذاكرة:           1960        1463         100          43         396         255
المبادلة:          2047          66        1981

==================== فحص مساحة القرص ====================
---------- مساحة قرص نظام التشغيل ----------
نظام الملفات الحجم المستخدم المتاح نسبة الاستخدام نقطة التركيب
/dev/root 59G 45G 14G 77% /

---------- مساحة قرص الحاوية ----------
نظام الملفات الحجم المستخدم المتاح نسبة الاستخدام نقطة التركيب
overlay 59G 45G 14G 77% /
/dev/root 59G 45G 14G 77% /shared
/dev/root 59G 45G 14G 77% /var/log

==================== معلومات القرص ====================
القرص /dev/loop0: 110.24 ميغابايت، 115593216 بايت، 225768 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop2: 73.91 ميغابايت، 77479936 بايت، 151328 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop3: 103.102 ميغابايت، 109043712 بايت، 212976 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop4: 73.89 ميغابايت، 77459456 بايت، 151288 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop5: 55.68 ميغابايت، 58363904 بايت، 113992 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop6: 63.71 ميغابايت، 66789376 بايت، 130448 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop7: 63.10 ميغابايت، 67080192 بايت، 131016 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/xvda: 60 جيجابايت، 64424509440 بايت، 125829120 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت
نوع تسمية القرص: dos
معرف القرص: 0x15e6b846

الجهاز     البدء   النهاية القطاعات الحجم نوع النوع
/dev/xvda1 *     2048 125829086 125827039  60G 83 Linux


القرص /dev/loop8: 26.33 ميغابايت، 27602944 بايت، 53912 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop9: 110.4 ميغابايت، 115384320 بايت، 225360 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop10: 55.37 ميغابايت، 58052608 بايت، 113384 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop11: 104.2 ميغابايت، 109252608 بايت، 213384 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت


القرص /dev/loop13: 25.76 ميغابايت، 26992640 بايت، 52720 قطاعات
الوحدات: قطاعات من 1 * 512 = 512 بايت
حجم القطاع (منطقي/فعلي): 512 بايت / 512 بايت
حجم الإدخال/الإخراج (الحد الأدنى/الأمثل): 512 بايت / 512 بايت

==================== نهاية معلومات القرص ====================

هل هذا يعني أنه يجب عليّ ترقية Docker أولاً إذا واجهت هذه المشكلة أثناء محاولة إعادة البناء؟

أنا حاليًا على 3.4.0.beta3-dev(93983286b5)

تحديث: لقد أعدت البناء مرة أخرى، وهذه المرة تم بنجاح.

إعجابَين (2)

هناك تعليمات محددة لذلك في المنشور الأصلي.

من المحتمل أن تقوم بترقية Docker بغض النظر عما إذا كانت لديك أي مشكلات.

إعجابَين (2)

بالنسبة لي، ما ساعد في النهاية هو تحديث دوكر.
لقد اتبعت https://stackoverflow.com/a/30794189، ثم قمت بتشغيل:
sudo service docker start

فقط بعد ذلك:

./launcher start app
./launcher stop app
./launcher rebuild app
3 إعجابات

I’m having significant problems doing this upgrade too. Similar @Vaping_Community, I have postgres on a different mounted volume (/mnt/volume_tor1_01/shared/standalone).

I am getting this error

mv: cannot move '/shared/postgres_data' to '/shared/postgres_data_old': Device or resource busy
mv: inter-device move failed: '/shared/postgres_data_new' to '/shared/postgres_data/postgres_data_new'; unable to remove target: Directory not empty

 [...]

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 13 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

My understanding is that the solution is to basically manually rename
postgres_datapostgres_data_old
postgres_newpostgres_data

then run ./launcher rebuild app. Seems simple enough, but when I rebuild, I still am stuck in the loop and end up with the following directories:

  • postgres_data_older
  • postgres_data_old (I think it becomes postgres_data_older)
  • postgres_data
  • postgres_data_new

It seems like for some reason it’s not recognizing that postgres_data has updated, tries to do it again, fails when trying to move the directory.

$ cat postgres_data/PG_VERSION 
15

I tried the manual approach laid out in the OP but no luck either. Please help!

full log
x86_64 arch detected.
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 600 app
app
2.0.20250129-0720: Pulling from discourse/base
Digest: sha256:01b8516e5504c0e9bc3707773015ff4407be03a89154194ff3b5b8699291bc26
Status: Image is up to date for discourse/base:2.0.20250129-0720
docker.io/discourse/base:2.0.20250129-0720
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-23T11:41:32.477354 #1]  INFO -- : Reading from stdin
I, [2025-02-23T11:41:32.504068 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown: 
I, [2025-02-23T11:41:32.508552 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2025-02-23T11:41:32.513290 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2025-02-23T11:41:32.517671 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown: 
I, [2025-02-23T11:41:32.522244 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown: 
I, [2025-02-23T11:41:32.523354 #1]  INFO -- : Replacing data_directory = '/var/lib/postgresql/15/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.523912 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.524756 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.525365 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.526239 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.526873 #1]  INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.527613 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.531734 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.532882 #1]  INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/15/main/postgresql.conf
I, [2025-02-23T11:41:32.534021 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-23T11:41:32.534342 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-23T11:41:32.534935 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-02-23T11:41:32.535476 #1]  INFO -- : > if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
W: https://dl.yarnpkg.com/debian/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
debconf: delaying package configuration, since apt-utils is not installed
mv: cannot move '/shared/postgres_data' to '/shared/postgres_data_old': Device or resource busy
mv: inter-device move failed: '/shared/postgres_data_new' to '/shared/postgres_data/postgres_data_new'; unable to remove target: Directory not empty
I, [2025-02-23T11:42:52.303584 #1]  INFO -- : Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
Upgrading PostgreSQL from version 13 to 15
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /shared/postgres_data_new ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok


Success. You can now start the database server using:

    /usr/lib/postgresql/15/bin/pg_ctl -D /shared/postgres_data_new -l logfile start

Get:1 http://deb.debian.org/debian bookworm-backports InRelease [59.0 kB]
Get:2 http://deb.debian.org/debian bookworm InRelease [151 kB]
Get:3 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Get:4 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:5 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]
Get:6 https://deb.nodesource.com/node_22.x nodistro InRelease [12.1 kB]
Get:7 http://deb.debian.org/debian bookworm-backports/main amd64 Packages [283 kB]
Get:8 http://deb.debian.org/debian bookworm/main amd64 Packages [8,792 kB]
Get:9 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [13.5 kB]
Get:10 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [246 kB]
Get:11 https://dl.yarnpkg.com/debian stable/main amd64 Packages [10.9 kB]
Get:12 https://dl.yarnpkg.com/debian stable/main all Packages [10.9 kB]
Get:13 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg InRelease [129 kB]
Get:14 https://deb.nodesource.com/node_22.x nodistro/main amd64 Packages [5,636 B]
Get:15 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 Packages [360 kB]
Fetched 10.2 MB in 2s (6,490 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  libllvm19 postgresql-client-13
Suggested packages:
  postgresql-doc-13
The following NEW packages will be installed:
  libllvm19 postgresql-13 postgresql-13-pgvector postgresql-client-13
0 upgraded, 4 newly installed, 0 to remove and 12 not upgraded.
Need to get 41.6 MB of archives.
After this operation, 184 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main amd64 libllvm19 amd64 1:19.1.4-1~deb12u1 [25.9 MB]
Get:2 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-client-13 amd64 13.20-1.pgdg120+1 [1,538 kB]
Get:3 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13 amd64 13.20-1.pgdg120+1 [13.9 MB]
Get:4 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13-pgvector amd64 0.8.0-1.pgdg120+1 [297 kB]
Fetched 41.6 MB in 2s (18.8 MB/s)
Selecting previously unselected package libllvm19:amd64.
(Reading database ... 33363 files and directories currently installed.)
Preparing to unpack .../libllvm19_1%3a19.1.4-1~deb12u1_amd64.deb ...
Unpacking libllvm19:amd64 (1:19.1.4-1~deb12u1) ...
Selecting previously unselected package postgresql-client-13.
Preparing to unpack .../postgresql-client-13_13.20-1.pgdg120+1_amd64.deb ...
Unpacking postgresql-client-13 (13.20-1.pgdg120+1) ...
Selecting previously unselected package postgresql-13.
Preparing to unpack .../postgresql-13_13.20-1.pgdg120+1_amd64.deb ...
Unpacking postgresql-13 (13.20-1.pgdg120+1) ...
Selecting previously unselected package postgresql-13-pgvector.
Preparing to unpack .../postgresql-13-pgvector_0.8.0-1.pgdg120+1_amd64.deb ...
Unpacking postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
Setting up libllvm19:amd64 (1:19.1.4-1~deb12u1) ...
Setting up postgresql-client-13 (13.20-1.pgdg120+1) ...
Setting up postgresql-13 (13.20-1.pgdg120+1) ...
Creating new PostgreSQL cluster 13/main ...
/usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main --auth-local peer --auth-host md5
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/13/main ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:

    pg_ctlcluster 13 main start

invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Setting up postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
Processing triggers for libc-bin (2.36-9+deb12u9) ...
Processing triggers for postgresql-common (267.pgdg120+1) ...
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:
Stopping PostgreSQL 13 database server: main.
Stopping PostgreSQL 15 database server: main.
Performing Consistency Checks
-----------------------------
Checking cluster versions                                   ok
Checking database user is the install user                  ok
Checking database connection settings                       ok
Checking for prepared transactions                          ok
Checking for system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for user-defined encoding conversions              ok
Checking for user-defined postfix operators                 ok
Checking for incompatible polymorphic functions             ok
Creating dump of global objects                             ok
Creating dump of database schemas                           ok
Checking for presence of required libraries                 ok
Checking database user is the install user                  ok
Checking for prepared transactions                          ok
Checking for new cluster tablespace directories             ok

If pg_upgrade fails after this point, you must re-initdb the
new cluster before continuing.

Performing Upgrade
------------------
Analyzing all rows in the new cluster                       ok
Freezing all rows in the new cluster                        ok
Deleting files from new pg_xact                             ok
Copying old pg_xact to new server                           ok
Setting oldest XID for new cluster                          ok
Setting next transaction ID and epoch for new cluster       ok
Deleting files from new pg_multixact/offsets                ok
Copying old pg_multixact/offsets to new server              ok
Deleting files from new pg_multixact/members                ok
Copying old pg_multixact/members to new server              ok
Setting next multixact ID and offset for new cluster        ok
Resetting WAL archives                                      ok
Setting frozenxid and minmxid counters in new cluster       ok
Restoring global objects in the new cluster                 ok
Restoring database schemas in the new cluster               ok
Copying user relation files                                 ok
Setting next OID for new cluster                            ok
Sync data directory to disk                                 ok
Creating script to delete old cluster                       ok
Checking for extension updates                              notice

Your installation contains extensions that should be updated
with the ALTER EXTENSION command.  The file
    update_extensions.sql
when executed by psql by the database superuser will update
these extensions.


Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 13 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------
إعجاب واحد (1)

الترقية على ARM (aarch64) مع إعدادات لغة غير افتراضية

لقد أمضيت بعض الوقت في إصلاح ترقية معيبة على خادم واحد بإعداد حاويتين.

  1. وحدة المعالجة المركزية الخاصة به هي ARM
  2. تم تكوين Discourse باستخدام إعداد اللغة en_UK.UTF-8

خطوة بخطوة، اكتشفت أن:

  1. tianon/postgres-upgrade:13-to-15 لا يعمل على ARM
  2. يتم تخزين تكوين اللغة في share/${CONTAINER}/postgres_data/postgresql.conf

بدأت بالتعليق على جزء env: من حاوية البيانات، لضمان استخدامها لإعدادات اللغة الافتراضية.

لذلك، للخروج من فوضى الترقية، اتخذت خطوة خطيرة، بافتراض أن اختلافات الترتيب بين en_GB و en_US كانت ضئيلة، وقمت بتحديث المجموعة بأكملها بلا رحمة إلى en_US:

UPDATE pg_database SET datctype='en_US.UTF-8', datcollate='en_US.UTF-8';

أنا غير متأكد من أن هذه الخطوة مطلوبة، وقد تختلف النتائج من مستخدم لآخر (YMMV). أتركها هنا لمن هم أكثر معرفة للتعليق، و لا أوصي بها على الإطلاق للغات المختلفة!

ثم قمت باستبدال إعداد اللغة في postgresql.conf:

sed -i -e 's/en_GB/en_US/g' shared/data/postgres_data/postgresql.conf
sudo -H -u discourse ./launcher rebuild data
...
UPGRADE OF POSTGRES COMPLETE

:tada:

لا تعتقد أن الأمر كان سهلاً: أنا لا أذكر المسار الطويل لاستكشاف الخيارات، خاصة عندما تدخلت، كانت واجهة المسؤول غير متاحة، وكان آخر نسخة احتياطية قد تم إنشاؤها قبل 6 أيام. كان علي أن أعبث قبل أن أتمكن من الوصول إلى حل مناسب - أو على الأقل، حل يعمل.

آمل أن يوفر هذا بعض الوقت لبعض الأشخاص.

5 إعجابات

هل لا تزال ترى هذا في سجلاتك عند كل عملية إعادة بناء؟ إذا كان الأمر كذلك، أنا أشتبه في أنك كنت تنظر بطريقة ما إلى (وبالتالي أعدت تسمية يدوياً) الدلائل غير الصحيحة هنا:

إذا كانت وحدة التخزين /shared في الحاوية مُعّدة على الخادم إلى /mnt/volume_tor1_01/shared/standalone، فإن الأمر cat /mnt/volume_tor1_01/shared/standalone/postgres_data/PG_VERSION يجب أن يرجع 13 بدلاً من 15.

هل يمكنك مشاركة ملف app.yml الذي قمت بتنظيفه؟

4 إعجابات

أعتقد أنك حددت المشكلة بشكل صحيح. إليك ما لدي في ملف app.yml الخاص بي:

## حاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /mnt/volume_tor1_01/shared/standalone
      guest: /shared
  - volume:
      host: /mnt/volume_tor1_01/shared/standalone/log/var-log
      guest: /var/log
  - volume:
      host: /var/postgres_data_discourse
      guest: /shared/postgres_data

(بناءً على هذا الدليل Move Uploads and Backups to DigitalOcean Block Storage)

$ cat postgres_data/PG_VERSION 
15
$ cat /var/postgres_data_discourse/PG_VERSION 
13

لذا أعتقد أن المشكلة قد تم حلها بالفعل بهذا النهج PostgreSQL 15 update - #125 by Vaping_Community

أعتقد أن ما أربكني هو أن لدي مجلدات postgres_data متعددة على وحدة التخزين mnt (لأنني أعدت تشغيل إعادة البناء) ولم أدرك أن المجلد المصدر كان في الواقع في /var/

سأجرب ذلك لاحقًا الليلة.

إعجابَين (2)

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

8 إعجابات

لقد نجح الأمر :slight_smile:

إعجابَين (2)

لاحظ أن UIDs تتغير!

/launcher enter app
تم اكتشاف معمارية x86_64.
grep postgres /etc/passwd
postgres:x:101:104:مسؤول PostgreSQL,,,:/var/lib/postgresql:/bin/bash

هذا ما أوقعني في مشكلة…

نعم، نجح الأمر معي ولكن من الأفضل استخدام التعليمات المحدثة من منشور OP-

[اقتباس=“mwaniki، المنشور: 1، الموضوع: 349515”]

docker run --rm -v /var/discourse/shared/standalone:/shared local_discourse/app \
	chown -R postgres:postgres /shared/postgres_data #(أو local_discourse/data)

[/اقتباس]

لا أستطيع تحرير منشوري لإضافة ملاحظة.

إعجابَين (2)

فشل معي أيضًا.

more /var/discourse/shared/standalone/postgres_data_new/pg_upgrade_output.d/20250416T103311.340/log/pg_upgrade_server.log

-----------------------------------------------------------------
  pg_upgrade run on Wed Apr 16 10:33:11 2025
-----------------------------------------------------------------

command: "/usr/lib/postgresql/13/bin/pg_ctl" -w -l "/shared/postgres_data_new/pg_upgrade_output.d/20250416T103311.340/log/pg_upgrade_server.log" -D "/shared/postgres_data" -o
"-p 50432 -b  -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/postgresql'" start >> "/shared/postgres_data_new/pg_upgrade_output.d/
20250416T103311.340/log/pg_upgrade_server.log" 2>&1
waiting for server to start....2025-04-16 10:33:11.515 UTC [1887] LOG:  starting PostgreSQL 13.20 (Debian 13.20-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12
.2.0-14) 12.2.0, 64-bit
2025-04-16 10:33:11.517 UTC [1887] LOG:  listening on Unix socket "/var/lib/postgresql/.s.PGSQL.50432"
2025-04-16 10:33:11.525 UTC [1887] LOG:  could not open configuration file "/etc/postgresql/13/main/pg_hba.conf": No such file or directory
2025-04-16 10:33:11.525 UTC [1887] FATAL:  could not load pg_hba.conf
2025-04-16 10:33:11.526 UTC [1887] LOG:  database system is shut down

يبدو أنه لا يعثر على /etc/postgresql/13/main/pg_hba.conf، وهو محق في ذلك لأنه غير موجود. ومع ذلك، فهو موجود في مواقع متعددة:

/var/discourse/shared/standalone/postgres_data_older/pg_hba.conf
/var/discourse/shared/standalone/postgres_data_new/pg_hba.conf
/var/discourse/shared/standalone/postgres_data/pg_hba.conf
/var/lib/docker/overlay2/6514156241efd883dd59b27a0275ba1cc73a7365fb78c5782536a39ee2d6d641/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/8afed861b039e5a366dc9a5513cd7df5a958d86a41f05063ce5256fb9f8fdfec/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/fa8893e9f714439469d391635d8882b345e90705a886d74cf6fea8d5460df3f0/diff/etc/postgresql/15/main/pg_hba.conf
/var/lib/docker/overlay2/e4eec92eb7b181648ca2bc6744ac3af0935745b75b1abe89170fc4b82a8eca42/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/4cd3189b9d554b1c60891dc5d48cc670e5d7d847ec5a0f2dfa91ad7f66b3a211/diff/etc/postgresql/13/main/pg_hba.conf
/var/lib/docker/overlay2/0db2210fc76fce6f41912183f744517154f46af15a0b1a1e976999eabbd801d9/diff/etc/postgresql/15/main/pg_hba.conf
/var/postgres_data/postgres_data_new/pg_hba.conf
/var/postgres_data/pg_hba.conf

أي تلميحات؟

حاولت استخدام الأمر docker run… وتلقيت:

التحقق من إصدارات العنقود
مجلدات بيانات العنقود القديمة والبيانات ثنائية الإصدار من إصدارات رئيسية مختلفة.

ما إصدار دوكر الخاص بك؟ وما إصدار نظام التشغيل الخاص بك؟ لقد وجدت أن الانتقال إلى جهاز افتراضي جديد غالبًا ما يكون أسهل.

إصدار Docker: 28.0.4
إصدار Linux: 5.15.0-131-generic

يمكنك محاولة تغيير إلى قالب بوستجريس 13 في ملف app.yml الخاص بك.

هذه داخل الحاوية. أنت تنظر إلى خارج الحاوية.

لقد فعلت ذلك فقط لترقية Discourse، ولقد نجحت، والآن لدي:

templates:
  - "templates/postgres.13.template.yml"

ألا يعني هذا أنه لا يمكنني ترقية Postgres؟

أعتقد أنه يمكنك الآن تغييره مرة أخرى إلى القالب العادي والمحاولة مرة أخرى. ما سأفعله هو الانتقال إلى جهاز افتراضي جديد، ولكن يمكنك المحاولة مرة أخرى إذا أردت.

لقد قمت بترقية Postgres يدويًا كما هو موضح في المنشور الأول، على أي حال لا يمكنني إعادة تعيين القالب إلى postgres.template.yml لأنه لن يتم إعادة بنائه لنفس المشكلة:

2025-04-16 13:40:07.815 UTC [1888] LOG: لم يتمكن من فتح ملف التكوين “/etc/postgresql/13/main/pg_hba.conf”: لا يوجد مثل هذا الملف أو الدليل
2025-04-16 13:40:07.815 UTC [1888] FATAL: لم يتمكن من تحميل pg_hba.conf

سألتزم بالإصدار 13 على أمل ألا يتعطل في المستقبل.
شكرًا لك @pfaffman.

أحاول تشغيل ترقية، لكنها تفشل لأنها لا يمكنها العثور على ملف تأكدت من وجوده:

نهاية السجل + التحقق من الملفات

-----------------------------
التحقق من إصدارات الكتلة                                   موافق
 
*فشل*
راجع الأسطر القليلة الأخيرة من "/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log" لمعرفة
السبب المحتمل للفشل.
 
فشل الاتصال بالخادم عبر المقبس "var/lib/postgresql/.s.PGSQL.50432": لا يوجد هذا الملف أو الدليل
        هل الخادم يعمل محليًا ويقبل الاتصالات على هذا المقبس؟
 
تعذر الاتصال بـ postmaster المصدر الذي بدأ بالأمر:
"/usr/lib/postgresql/13/bin/pg_ctl" -w -l "/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log" -D "/shared/postgres_data" -o "-p 50432 -b  -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/postgresql'" start
فشل، الخروج
-------------------------------------------------------------------------------------
فشل ترقية POSTGRES
 
يرجى زيارة https://meta.discourse.org/t/postgresql-15-update/349515 للدعم.
 
يمكنك تشغيل ./launcher start app لإعادة تشغيل تطبيقك في هذه الأثناء
-------------------------------------------------------------------------------------
 
 
 
فشل
--------------------
Pups::ExecError: if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi
 فشل مع العودة #<Process::Status: pid 17 exit 1>
موقع الفشل: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
فشل التنفيذ مع المعلمات {"tag"=>"db", "cmd"=>"if [ -f /root/install_postgres ]; then\n  /root/install_postgres && rm -f /root/install_postgres\nelif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then\n  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1\nfi\n"}
فشل التهيئة مع رمز الخروج 1
** فشل التهيئة ** يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من واحد.
قد يساعد ./discourse-doctor في تشخيص المشكلة.
afa058b1ff7d14d9469fe27bc39dc08562c4e249bdf7c7e153b4030a1bb0dbc2
root@amcforum:/var/discourse# ./launcher start app && ./launcher enter app
تم اكتشاف بنية x86_64.
 
بدء تشغيل الحاوية الحالية
+ /usr/bin/docker start app
app
تم اكتشاف بنية x86_64.
root@amcforum-app:/var/www/discourse# cat /shared/postgres_data_new/pg_upgrade_output.d/0250605T024052.178/log/pg_upgrade_server.log 
-----------------------------------------------------------------
  تم تشغيل pg_upgrade يوم الخميس 5 يونيو 02:40:52 2025
-----------------------------------------------------------------
 
الأمر: "/usr/lib/postgresql/13/bin/pg_ctl" -w -l "/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log" -D "/shared/postgres_data" -o "-p 50432 -b  -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/postgresql'" start >> "/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log" 2>&1
الانتظار حتى يبدأ الخادم....2025-06-05 02:40:52.313 UTC [1886] LOG:  بدء PostgreSQL 13.21 (Debian 13.21-1.pgdg120+1) على x86_64-pc-linux-gnu، تم تجميعه بواسطة gcc (Debian 12.2.0-14) 12.2.0، 64 بت
2025-06-05 02:40:52.316 UTC [1886] LOG:  الاستماع على المقبس Unix "/var/lib/postgresql/.s.PGSQL.50432"
2025-06-05 02:40:52.324 UTC [1886] LOG:  تعذر فتح ملف التكوين "/etc/postgresql/13/main/pg_hba.conf": لا يوجد هذا الملف أو الدليل
2025-06-05 02:40:52.324 UTC [1886] FATAL:  تعذر تحميل pg_hba.conf
2025-06-05 02:40:52.327 UTC [1886] LOG:  تم إيقاف تشغيل نظام قاعدة البيانات
 توقف الانتظار
pg_ctl: تعذر بدء الخادم
افحص مخرجات السجل.
 
 
root@amcforum-app:/var/www/discourse# ls -lah "/etc/postgresql/13/main/pg_hba.conf"
-rw-r----- 1 postgres postgres 4.8K Jan  3 13:02 /etc/postgresql/13/main/pg_hba.conf
root@amcforum-app:/var/www/discourse#
إعجاب واحد (1)