# Обновление PostgreSQL 15

**URL:** https://meta.discourse.org/t/postgresql-15-update/349515
**Category:** Announcements
**Created:** [29.Январь.2025 07:20:00 UTC](https://meta.discourse.org/t/postgresql-15-update/349515 "2025-01-29T07:20:00Z")
**Posts on this page:** 20
**Page:** 5

<div class="post-metadata">

### Author: ![th21](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/th21/32/211915_2.png) [@th21](https://meta.discourse.org/u/th21)
#### Post date: [15.Февраль.2025 20:05:15 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/131 "2025-02-15T20:05:15Z")

</div>

```plaintext
Успех. Теперь вы можете запустить сервер базы данных с помощью команды:

    pg_ctlcluster 13 main start

invoke-rc.d: не удалось определить текущий уровень выполнения
invoke-rc.d: policy-rc.d запретил выполнение команды start.
Настройка 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.
Выполнение проверок согласованности
-----------------------------
Проверка версий кластеров ok

Исходный кластер был выключен некорректно.
Ошибка, выход
-------------------------------------------------------------------------------------
ОБНОВЛЕНИЕ 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 уже запущен, остановите контейнер ; 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 уже запущен, остановите контейнер ; exit 1\nfi\n"}
Загрузка не удалась с кодом выхода 1
**ЗАГРУЗКА НЕ УДАЛАСЬ** Пожалуйста, прокрутите вверх и найдите более ранние сообщения об ошибках, их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.
cbebd339ee3bd1e246300784f7825042702c1b5032877bfe580cb7f635fb852b

```

Информация о диске:

```plaintext
========================================
Discourse 3.4.0.beta3
Версия Discourse на mydomian: Discourse 3.4.0.beta3
Версия Discourse на localhost: Discourse 3.4.0.beta3

==================== ИНФОРМАЦИЯ О ПАМЯТИ ====================
RAM (МБ): 2055

              total used free shared buff/cache available
Mem: 1960 1463 100 43 396 255
Swap: 2047 66 1981

==================== ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ ====================
---------- Свободное место на диске ОС ----------
Filesystem Size Used Avail Use% Mounted on
/dev/root 59G 45G 14G 77% /

---------- Свободное место на диске контейнера ----------
Filesystem Size Used Avail Use% Mounted on
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

Устройство Boot Start End Sectors Size Id Type
/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)

Обновление: Я пересобрал систему снова, и на этот раз всё прошло успешно.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [15.Февраль.2025 20:44:12 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/132 "2025-02-15T20:44:12Z")

</div>

> [@th21](#):
>
> ```plaintext
> Исходный кластер был выключен некорректно.
> 
> ```

В первом посте есть конкретные инструкции на этот счёт.

> [@th21](#):
>
> Мне сначала нужно обновить Docker

Вам, вероятно, следует обновить Docker независимо от того, есть ли у вас какие-либо проблемы.

---

<div class="post-metadata">

### Author: ![diogocsc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/diogocsc/32/119719_2.png) [@diogocsc](https://meta.discourse.org/u/diogocsc)
#### Post date: [16.Февраль.2025 21:52:05 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/133 "2025-02-16T21:52:05Z")

</div>

Для меня в итоге помогло обновление Docker.  
Я последовал инструкции по ссылке [https://stackoverflow.com/a/30794189](https://stackoverflow.com/a/30794189), а затем выполнил:  
`sudo service docker start`

Только после этого:

```plaintext
./launcher start app
./launcher stop app
./launcher rebuild app

```

---

<div class="post-metadata">

### Author: ![piffy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/piffy/32/254198_2.png) [@piffy](https://meta.discourse.org/u/piffy)
#### Post date: [23.Февраль.2025 12:02:40 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/134 "2025-02-23T12:02:40Z")

</div>

У меня тоже возникают серьёзные проблемы с этим обновлением. Как и у @Vaping_Community, у меня PostgreSQL находится на отдельном смонтированном томе (`/mnt/volume_tor1_01/shared/standalone`).

Получаю следующую ошибку:

```plaintext
mv: не удалось переместить '/shared/postgres_data' в '/shared/postgres_data_old': Устройство или ресурс занят
mv: межсетеое перемещение не удалось: '/shared/postgres_data_new' в '/shared/postgres_data/postgres_data_new'; не удалось удалить целевой объект: Каталог не пуст

 [...]

Обновление завершено
----------------
Статистика оптимизатора не переносится 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
-------------------------------------------------------------------------------------

```

Мое понимание таково, что решение заключается в ручном переименовании:  
`postgres_data` → `postgres_data_old`  
`postgres_new` → `postgres_data`

а затем выполнении `./launcher rebuild app`. Это кажется достаточно простым, но при повторной сборке я всё ещё застревал в цикле и в итоге получаю следующие директории:

- `postgres_data_older`
- ~~`postgres_data_old`~~ (по-видимому, она превращается в `postgres_data_older`)
- `postgres_data`
- `postgres_data_new`

Кажется, что по какой-то причине система не распознаёт, что `postgres_data` уже обновлён, пытается сделать это снова, и это завершается ошибкой при попытке переместить директорию.

```plaintext
$ cat postgres_data/PG_VERSION 
15

```

Я также попробовал ручной подход, описанный в оригинальном посте, но безрезультатно. Пожалуйста, помогите!

> **полный лог**
>
> ```plaintext
> 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: не удалось переместить '/shared/postgres_data' в '/shared/postgres_data_old': Устройство или ресурс занят
> mv: межсетеое перемещение не удалось: '/shared/postgres_data_new' в '/shared/postgres_data/postgres_data_new'; не удалось удалить целевой объект: Каталог не пуст
> 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
> -------------------------------------------------------------------------------------
> 
> ```

---

<div class="post-metadata">

### Author: ![hellekin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hellekin/32/51636_2.png) [@hellekin](https://meta.discourse.org/u/hellekin)
#### Post date: [24.Февраль.2025 17:27:33 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/135 "2025-02-24T17:27:33Z")

</div>

## Обновление на ARM (`aarch64`) с нестандартной локалью

> [@volas](#):
>
> `tianon/postgres-upgrade:13-to-15`

Я только что потратил время на исправление сбоя при обновлении на одном сервере с двумя контейнерами.

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`:

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

```

Я _не уверен_, что этот шаг необходим, YMMV. Оставляю это здесь для более сведущих людей, чтобы они высказались, и я _категорически не рекомендую_ делать это для других языков!

Затем я заменил локаль в `postgresql.conf`:

```plaintext
sed -i -e 's/en_GB/en_US/g' shared/data/postgres_data/postgresql.conf
sudo -H -u discourse ./launcher rebuild data
...
ОБНОВЛЕНИЕ POSTGRES ЗАВЕРШЕНО

```

🎉

Не думайте, что это было легко: я даже не упоминаю долгий путь изучения вариантов, особенно потому, что когда я вмешался, административный интерфейс был недоступен, а последнее резервное копирование было выполнено 6 дней назад. Мне _пришлось_ повозиться, прежде чем я смог прийти к правильному — или, по крайней мере, рабочему — решению.

Надеюсь, это сэкономит кому-то время.

---

<div class="post-metadata">

### Author: ![mwaniki](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mwaniki/32/313097_2.png) [@mwaniki](https://meta.discourse.org/u/mwaniki)
#### Post date: [25.Февраль.2025 07:23:15 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/136 "2025-02-25T07:23:15Z")

</div>

> [@piffy](#):
>
> ```plaintext
> Обновление PostgreSQL с версии 13 до 15
> 
> ```

Вы всё ещё видите это в логах при каждой пересборке? Если да, то, возможно, вы смотрели (и, следовательно, вручную переименовали) не те директории здесь:

> [@piffy](#):
>
> ```plaintext
> $ cat postgres_data/PG_VERSION 
> 15
> 
> ```

Если том контейнера `/shared` отображается на `/mnt/volume_tor1_01/shared/standalone` на хосте, то команда `cat /mnt/volume_tor1_01/shared/standalone/postgres_data/PG_VERSION` должна возвращать `13`, а не `15`.

Можете поделиться своим обезличенным файлом `app.yml`?

---

<div class="post-metadata">

### Author: ![piffy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/piffy/32/254198_2.png) [@piffy](https://meta.discourse.org/u/piffy)
#### Post date: [25.Февраль.2025 20:36:59 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/137 "2025-02-25T20:36:59Z")

</div>

Я думаю, вы правильно определили проблему. Вот что у меня в app.yml:

```plaintext
## 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](https://meta.discourse.org/t/move-uploads-and-backups-to-digitalocean-block-storage/89274))

```plaintext
$ cat postgres_data/PG_VERSION 
15

```

```plaintext
$ cat /var/postgres_data_discourse/PG_VERSION 
13

```

Поэтому я считаю, что проблема действительно решается этим подходом [PostgreSQL 15 update - #125 by Vaping\_Community](https://meta.discourse.org/t/postgresql-15-update/349515/125?u=piffy)

Я думаю, что меня сбило с толку то, что на томе mnt было несколько папок postgres\_data (потому что я перезапустил rebuild), и я не понял, что исходная папка на самом деле находится в /var/

Попробую это позже сегодня вечером

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [25.Февраль.2025 22:06:12 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/138 "2025-02-25T22:06:12Z")

</div>

Гораздо проще развернуть новую виртуальную машину и восстановить там резервную копию. Таким образом, вы полностью пропускаете этап обновления PG и не сможете сломать старый сайт, пока новый не заработает.

---

<div class="post-metadata">

### Author: ![piffy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/piffy/32/254198_2.png) [@piffy](https://meta.discourse.org/u/piffy)
#### Post date: [26.Февраль.2025 14:44:57 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/139 "2025-02-26T14:44:57Z")

</div>

Сработало 🙂

---

<div class="post-metadata">

### Author: ![chrisc](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/chrisc/32/119982_2.png) [@chrisc](https://meta.discourse.org/u/chrisc)
#### Post date: [26.Март.2025 12:51:01 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/140 "2025-03-26T12:51:01Z")

</div>

> [@volas](#):
>
> Я не уверен и не помню, каким должен быть владелец, поэтому указал тот же UID/GID, что и у папок postgres\_backup и postgres\_run, которые находились рядом.
> 
> ```plaintext
> chown -R 101:104 /var/discourse/shared/standalone/postgres_data
> 
> ```
> 
> Теперь всё работает!

Обратите внимание, что UID могут измениться!

```bash
/launcher enter app
x86_64 arch detected.
grep postgres /etc/passwd
postgres:x:101:104:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

```

Это меня только что подвело…

---

<div class="post-metadata">

### Author: ![volas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/volas/32/130651_2.png) [@volas](https://meta.discourse.org/u/volas)
#### Post date: [26.Март.2025 18:10:49 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/142 "2025-03-26T18:10:49Z")

</div>

Да, у меня это сработало, но лучше использовать обновлённую инструкцию из первого сообщения:

> [@mwaniki](#):
>
> ```plaintext
> docker run --rm -v /var/discourse/shared/standalone:/shared local_discourse/app \
> chown -R postgres:postgres /shared/postgres_data #(или local_discourse/data)
> 
> ```

Я не могу отредактировать свой пост, чтобы добавить примечание.

---

<div class="post-metadata">

### Author: ![vulkanino](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vulkanino/32/119654_2.png) [@vulkanino](https://meta.discourse.org/u/vulkanino)
#### Post date: [16.Апрель.2025 10:42:26 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/143 "2025-04-16T10:42:26Z")

</div>

У меня тоже не получается.

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

```plaintext
-----------------------------------------------------------------
  pg_upgrade запущен в ср апр 16 10:33:11 2025
-----------------------------------------------------------------

команда: "/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
ожидание запуска сервера....2025-04-16 10:33:11.515 UTC [1887] LOG: запуск PostgreSQL 13.20 (Debian 13.20-1.pgdg120+1) на x86_64-pc-linux-gnu, скомпилировано gcc (Debian 12
.2.0-14) 12.2.0, 64-разрядная
2025-04-16 10:33:11.517 UTC [1887] LOG: прослушивание Unix-сокета "/var/lib/postgresql/.s.PGSQL.50432"
2025-04-16 10:33:11.525 UTC [1887] LOG: не удалось открыть файл конфигурации "/etc/postgresql/13/main/pg_hba.conf": файл или каталог не найден
2025-04-16 10:33:11.525 UTC [1887] FATAL: не удалось загрузить pg_hba.conf
2025-04-16 10:33:11.526 UTC [1887] LOG: система баз данных остановлена

```

Похоже, что он не находит `/etc/postgresql/13/main/pg_hba.conf`, и это верно, так как его там нет. Однако он находится в нескольких местах:

```plaintext
/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

```

Есть какие-то подсказки?

---

<div class="post-metadata">

### Author: ![vulkanino](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vulkanino/32/119654_2.png) [@vulkanino](https://meta.discourse.org/u/vulkanino)
#### Post date: [16.Апрель.2025 10:54:30 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/144 "2025-04-16T10:54:30Z")

</div>

Я попробовал вашу команду `docker run`… и получил:

Проверка версий кластера  
Данные старого кластера и каталоги бинарных файлов относятся к разным основным версиям.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [16.Апрель.2025 11:06:10 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/145 "2025-04-16T11:06:10Z")

</div>

Какая у вас версия Docker? Какая версия вашей ОС? Я обнаружил, что часто проще перейти на новую виртуальную машину.

---

<div class="post-metadata">

### Author: ![vulkanino](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vulkanino/32/119654_2.png) [@vulkanino](https://meta.discourse.org/u/vulkanino)
#### Post date: [16.Апрель.2025 12:30:51 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/146 "2025-04-16T12:30:51Z")

</div>

Версия Docker: 28.0.4  
Версия Linux: 5.15.0-131-generic

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [16.Апрель.2025 13:03:25 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/147 "2025-04-16T13:03:25Z")

</div>

Вы можете попробовать изменить шаблон postgres 13 в вашем файле app.yml.

> [@vulkanino](#):
>
> Похоже, что он не находит `/etc/postgresql/13/main/pg_hba.conf`

Это находится внутри контейнера. Вы ищете вне контейнера.

---

<div class="post-metadata">

### Author: ![vulkanino](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vulkanino/32/119654_2.png) [@vulkanino](https://meta.discourse.org/u/vulkanino)
#### Post date: [16.Апрель.2025 13:24:15 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/148 "2025-04-16T13:24:15Z")

</div>

> [@pfaffman](#):
>
> Вы можете попробовать изменить шаблон на postgres 13 в вашем файле app.yml.

Я сделал это просто для обновления Discourse, и процесс завершился успешно. Теперь у меня вот что:

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

```

Разве это не означает, что я не могу обновить Postgres?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [16.Апрель.2025 13:29:33 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/149 "2025-04-16T13:29:33Z")

</div>

Думаю, теперь вы можете вернуть обычный шаблон и попробовать снова. Я бы перешел на новую виртуальную машину, но вы можете попробовать ещё раз, если хотите.

---

<div class="post-metadata">

### Author: ![vulkanino](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vulkanino/32/119654_2.png) [@vulkanino](https://meta.discourse.org/u/vulkanino)
#### Post date: [16.Апрель.2025 13:45:12 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/150 "2025-04-16T13:45:12Z")

</div>

Я вручную обновил 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.

---

<div class="post-metadata">

### Author: ![Firepup650](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firepup650/32/465200_2.png) [@Firepup650](https://meta.discourse.org/u/Firepup650)
#### Post date: [05.Июнь.2025 02:49:21 UTC](https://meta.discourse.org/t/postgresql-15-update/349515/151 "2025-06-05T02:49:21Z")

</div>

Попытка запуска обновления завершается неудачей, так как система не может найти файл, который, как я подтвердил, существует:

Конец лога + проверка файлов

```plaintext
-----------------------------
Проверка версий кластера ok
 
*ошибка*
Обратитесь к последним строкам файла "/shared/postgres_data_new/pg_upgrade_output.d/20250605T024052.178/log/pg_upgrade_server.log" для
выяснения вероятной причины сбоя.
 
Не удалось подключиться к серверу через сокет "/var/lib/postgresql/.s.PGSQL.50432": файл или каталог не найден
        Запущен ли сервер локально и принимает ли он подключения через этот сокет?
 
Не удалось подключиться к исходному постмастеру, запущенному командой:
"/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-bit
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 3 янв 13:02 /etc/postgresql/13/main/pg_hba.conf
root@amcforum-app:/var/www/discourse#

```

[Previous page](https://meta.discourse.org/t/postgresql-15-update/349515.md?page=4)

[Next page](https://meta.discourse.org/t/postgresql-15-update/349515.md?page=6)
