th21
2025 年2 月 15 日 20:05
131
成功。您现在可以使用以下命令启动数据库服务器:
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) ...
正在从已安装的 myspell/hunspell 包构建 PostgreSQL 字典...
正在删除过时的字典文件:
正在停止 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 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
mydomian 上的 Discourse 版本:Discourse 3.4.0.beta3
localhost 上的 Discourse 版本:Discourse 3.4.0.beta3
==================== 内存信息 ====================
RAM (MB):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 MiB, 115593216 字节, 225768 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop2: 73.91 MiB, 77479936 字节, 151328 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop3: 103.102 MiB, 109043712 字节, 212976 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop4: 73.89 MiB, 77459456 字节, 151288 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop5: 55.68 MiB, 58363904 字节, 113992 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop6: 63.71 MiB, 66789376 字节, 130448 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop7: 63.10 MiB, 67080192 字节, 131016 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/xvda: 60 GiB, 64424509440 字节, 125829120 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x15e6b846
设备 启动 起始 结束 扇区 大小 类型
/dev/xvda1 * 2048 125829086 125827039 60G 83 Linux
磁盘 /dev/loop8: 26.33 MiB, 27602944 字节, 53912 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop9: 110.4 MiB, 115384320 字节, 225360 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop10: 55.37 MiB, 58052608 字节, 113384 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop11: 104.2 MiB, 109252608 字节, 213384 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/loop13: 25.76 MiB, 26992640 字节, 52720 扇区
单位:扇区 * 1 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
==================== 磁盘信息结束 ====================
如果我在尝试重建时遇到此问题,是否应该先升级 Docker?
我现在使用的是 3.4.0.beta3-dev(93983286b5)
更新:我再次重建,这次成功了。
2 个赞
diogocsc
(Diogocsc)
2025 年2 月 16 日 21:52
133
对我来说,最终有帮助的是更新了docker。
我遵循了 https://stackoverflow.com/a/30794189,然后运行了:
sudo service docker start
之后才运行:
./launcher start app
./launcher stop app
./launcher rebuild app
3 个赞
piffy
2025 年2 月 23 日 12:02
134
我在进行此升级时也遇到了严重问题。与 @Vaping_Community 类似,我的 PostgreSQL 位于不同的挂载卷上(/mnt/volume_tor1_01/shared/standalone)。
我收到了以下错误:
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 已更新,尝试再次执行操作,但在尝试移动目录时失败。
$ cat postgres_data/PG_VERSION
15
我也尝试了 OP 中列出的手动方法,但同样没有成功。请帮忙!
完整日志
x86_64 架构已检测到。
确保启动器是最新的
获取 origin
启动器已是最新版本
停止旧容器
+ /usr/bin/docker stop -t 600 app
app
2.0.20250129-0720: 从 discourse/base 拉取
摘要:sha256:01b8516e5504c0e9bc3707773015ff4407be03a89154194ff3b5b8699291bc26
状态: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 -- : 从标准输入读取
I, [2025-02-23T11:41:32.504068 #1] INFO -- : 文件 > /etc/service/postgres/run chmod: +x chown:
I, [2025-02-23T11:41:32.508552 #1] INFO -- : 文件 > /etc/service/postgres/log/run chmod: +x chown:
I, [2025-02-23T11:41:32.513290 #1] INFO -- : 文件 > /etc/runit/3.d/99-postgres chmod: +x chown:
I, [2025-02-23T11:41:32.517671 #1] INFO -- : 文件 > /root/install_postgres chmod: +x chown:
I, [2025-02-23T11:41:32.522244 #1] INFO -- : 文件 > /root/upgrade_postgres chmod: +x chown:
I, [2025-02-23T11:41:32.523354 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 data_directory = '/var/lib/postgresql/15/main' 替换为 data_directory = '/shared/postgres_data'
I, [2025-02-23T11:41:32.523912 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?listen_addresses *=.*) 替换为 listen_addresses = '*'
I, [2025-02-23T11:41:32.524756 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?synchronous_commit *=.*) 替换为 synchronous_commit = $db_synchronous_commit
I, [2025-02-23T11:41:32.525365 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?shared_buffers *=.*) 替换为 shared_buffers = $db_shared_buffers
I, [2025-02-23T11:41:32.526239 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?work_mem *=.*) 替换为 work_mem = $db_work_mem
I, [2025-02-23T11:41:32.526873 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?default_text_search_config *=.*) 替换为 default_text_search_config = '$db_default_text_search_config'
I, [2025-02-23T11:41:32.527613 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?checkpoint_segments *=.*) 替换为 checkpoint_segments = $db_checkpoint_segments
I, [2025-02-23T11:41:32.531734 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?logging_collector *=.*) 替换为 logging_collector = $db_logging_collector
I, [2025-02-23T11:41:32.532882 #1] INFO -- : 在 /etc/postgresql/15/main/postgresql.conf 中将 (?-mix:#?log_min_duration_statement *=.*) 替换为 log_min_duration_statement = $db_log_min_duration_statement
I, [2025-02-23T11:41:32.534021 #1] INFO -- : 在 /etc/postgresql/15/main/pg_hba.conf 中将 (?-mix:^#local +replication +postgres +peer$) 替换为 local replication postgres peer
I, [2025-02-23T11:41:32.534342 #1] INFO -- : 在 /etc/postgresql/15/main/pg_hba.conf 中将 (?-mix:^host.*all.*all.*127.*$) 替换为 host all all 0.0.0.0/0 md5
I, [2025-02-23T11:41:32.534935 #1] INFO -- : 在 /etc/postgresql/15/main/pg_hba.conf 中将 (?-mix:^host.*all.*all.*::1\/128.*$) 替换为 host all all ::/0 md5
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 已在运行,请停止容器 ; exit 1
fi
initdb: 警告:对本地连接启用“信任”身份验证
initdb: 提示:您可以通过编辑 pg_hba.conf 或使用选项 -A,或 --auth-local 和 --auth-host 来更改此设置,下次运行 initdb 时。
W: https://dl.yarnpkg.com/debian/dists/stable/InRelease: 密钥存储在传统的 trusted.gpg 密钥环中 (/etc/apt/trusted.gpg),有关详细信息,请参阅 apt-key(8) 中的 DEPRECATION 部分。
debconf: 由于未安装 apt-utils,延迟软件包配置。
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 -- : 生成区域设置(这可能需要一些时间)...
en_US.UTF-8... 完成
生成完成。
将 PostgreSQL 从版本 13 升级到 15
属于此数据库系统的文件将由用户 "postgres" 拥有。
该用户还必须拥有服务器进程。
数据库集群将使用区域设置 "en_US.UTF-8" 初始化。
默认数据库编码已相应设置为 "UTF8"。
默认文本搜索配置将设置为 "english"。
数据页校验和已禁用。
修复现有目录 /shared/postgres_data_new 的权限 ... 完成
创建子目录 ... 完成
选择动态共享内存实现 ... posix
选择默认 max_connections ... 100
选择默认 shared_buffers ... 128MB
选择默认时区 ... Etc/UTC
创建配置文件 ... 完成
运行引导脚本 ... 完成
执行引导后初始化 ... 完成
将数据同步到磁盘 ... 完成
成功。您现在可以使用以下命令启动数据库服务器:
/usr/lib/postgresql/15/bin/pg_ctl -D /shared/postgres_data_new -l logfile start
获取:1 http://deb.debian.org/debian bookworm-backports InRelease [59.0 kB]
获取:2 http://deb.debian.org/debian bookworm InRelease [151 kB]
获取:3 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
获取:4 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
获取:5 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]
获取:6 https://deb.nodesource.com/node_22.x nodistro InRelease [12.1 kB]
获取:7 http://deb.debian.org/debian bookworm-backports/main amd64 Packages [283 kB]
获取:8 http://deb.debian.org/debian bookworm/main amd64 Packages [8,792 kB]
获取:9 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [13.5 kB]
获取:10 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [246 kB]
获取:11 https://dl.yarnpkg.com/debian stable/main amd64 Packages [10.9 kB]
获取:12 https://dl.yarnpkg.com/debian stable/main all Packages [10.9 kB]
获取:13 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg InRelease [129 kB]
获取:14 https://deb.nodesource.com/node_22.x nodistro/main amd64 Packages [5,636 B]
获取:15 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 Packages [360 kB]
已获取 10.2 MB,耗时 2 秒 (6,490 kB/s)
正在读取软件包列表...
正在读取软件包列表...
正在构建依赖关系树...
正在读取状态信息...
将安装以下附加软件包:
libllvm19 postgresql-client-13
建议的软件包:
postgresql-doc-13
将安装以下新软件包:
libllvm19 postgresql-13 postgresql-13-pgvector postgresql-client-13
0 个已升级,4 个新安装,0 个待删除,12 个未升级。
需要获取 41.6 MB 的归档文件。
此操作后,将额外使用 184 MB 的磁盘空间。
获取:1 http://deb.debian.org/debian bookworm/main amd64 libllvm19 amd64 1:19.1.4-1~deb12u1 [25.9 MB]
获取:2 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-client-13 amd64 13.20-1.pgdg120+1 [1,538 kB]
获取:3 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13 amd64 13.20-1.pgdg120+1 [13.9 MB]
获取:4 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13-pgvector amd64 0.8.0-1.pgdg120+1 [297 kB]
已获取 41.6 MB,耗时 2 秒 (18.8 MB/s)
选择以前未选中的软件包 libllvm19:amd64。
(正在读取数据库 ... 当前已安装 33363 个文件和目录。)
正在准备解包 .../libllvm19_1%3a19.1.4-1~deb12u1_amd64.deb ...
正在解包 libllvm19:amd64 (1:19.1.4-1~deb12u1) ...
选择以前未选中的软件包 postgresql-client-13。
正在准备解包 .../postgresql-client-13_13.20-1.pgdg120+1_amd64.deb ...
正在解包 postgresql-client-13 (13.20-1.pgdg120+1) ...
选择以前未选中的软件包 postgresql-13。
正在准备解包 .../postgresql-13_13.20-1.pgdg120+1_amd64.deb ...
正在解包 postgresql-13 (13.20-1.pgdg120+1) ...
选择以前未选中的软件包 postgresql-13-pgvector。
正在准备解包 .../postgresql-13-pgvector_0.8.0-1.pgdg120+1_amd64.deb ...
正在解包 postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
正在设置 libllvm19:amd64 (1:19.1.4-1~deb12u1) ...
正在设置 postgresql-client-13 (13.20-1.pgdg120+1) ...
正在设置 postgresql-13 (13.20-1.pgdg120+1) ...
正在创建新的 PostgreSQL 集群 13/main ...
/usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main --auth-local peer --auth-host md5
属于此数据库系统的文件将由用户 "postgres" 拥有。
该用户还必须拥有服务器进程。
数据库集群将使用区域设置 "C.UTF-8" 初始化。
默认数据库编码已相应设置为 "UTF8"。
默认文本搜索配置将设置为 "english"。
数据页校验和已禁用。
修复现有目录 /var/lib/postgresql/13/main 的权限 ... 完成
创建子目录 ... 完成
选择动态共享内存实现 ... posix
选择默认 max_connections ... 100
选择默认 shared_buffers ... 128MB
选择默认时区 ... Etc/UTC
创建配置文件 ... 完成
运行引导脚本 ... 完成
执行引导后初始化 ... 完成
将数据同步到磁盘 ... 完成
成功。您现在可以使用以下命令启动数据库服务器:
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) 的触发器 ...
从已安装的 myspell/hunspell 软件包构建 PostgreSQL 字典...
删除过时的字典文件:
正在停止 PostgreSQL 13 数据库服务器:main。
正在停止 PostgreSQL 15 数据库服务器:main。
执行一致性检查
-----------------------------
检查集群版本 完成
检查数据库用户是否为安装用户 完成
检查数据库连接设置 完成
检查是否存在预准备事务 完成
检查用户表中是否存在系统定义的复合类型 完成
检查用户表中是否存在 reg* 数据类型 完成
检查 contrib/isn 是否存在 bigint 传递不匹配 完成
检查是否存在用户定义的编码转换 完成
检查是否存在用户定义的后缀运算符 完成
检查是否存在不兼容的多态函数 完成
创建全局对象转储 完成
创建数据库架构转储 完成
检查是否存在所需的库 完成
检查数据库用户是否为安装用户 完成
检查是否存在预准备事务 完成
检查新集群表空间目录 完成
如果 pg_upgrade 在此点之后失败,您必须重新初始化
新集群才能继续。
执行升级
------------------
分析新集群中的所有行 完成
冻结新集群中的所有行 完成
从新 pg_xact 删除文件 完成
将旧 pg_xact 复制到新服务器 完成
为新集群设置最旧的 XID 完成
为新集群设置下一个事务 ID 和纪元 完成
从新 pg_multixact/offsets 删除文件 完成
将旧 pg_multixact/offsets 复制到新服务器 完成
从新 pg_multixact/members 删除文件 完成
将旧 pg_multixact/members 复制到新服务器 完成
为新集群设置下一个 multixact ID 和偏移量 完成
重置 WAL 归档 完成
在新集群中设置 frozenxid 和 minmxid 计数器 完成
在新集群中恢复全局对象 完成
在新集群中恢复数据库架构 完成
复制用户关系文件 完成
为新集群设置下一个 OID 完成
将数据目录同步到磁盘 完成
创建删除旧集群的脚本 完成
检查扩展更新 notice
您的安装包含应使用 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
-------------------------------------------------------------------------------------
1 个赞
ARM (aarch64) 上的升级(非默认区域设置)
我花了一些时间修复了一个单服务器双容器设置中的错误升级。
它的 CPU 是 ARM
Discourse 配置为 en_UK.UTF-8 区域设置
逐步排查后,我发现:
tianon/postgres-upgrade:13-to-15 在 ARM 上无法工作
区域设置配置存储在 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
别以为这很容易:我没有提到探索选项的长路,尤其是在我介入时,管理员界面不可用,而最后一次备份是在 6 天前。我_不得不_摸索一番,才能找到一个合适的——或者至少是可行的——解决方案。
希望这能为一些人节省时间。
5 个赞
mwaniki
(Mwaniki Wairungu)
2025 年2 月 25 日 07:23
136
您是否仍然在每次重建的日志中看到此内容?如果是这样,我怀疑您在此处以某种方式查看了(因此手动重命名了)错误的目录:
如果容器的 /shared 卷映射到主机上的 /mnt/volume_tor1_01/shared/standalone,那么 cat /mnt/volume_tor1_01/shared/standalone/postgres_data/PG_VERSION 应该返回 13 而不是 15。
您能否分享您已清理的 app.yml 文件?
4 个赞
piffy
2025 年2 月 25 日 20:36
137
我认为您正确地指出了问题所在。这是我在 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
(基于此指南 https://meta.discourse.org/t/move-uploads-and-backups-to-digitalocean-block-storage/89274)
$ cat postgres_data/PG_VERSION
15
$ cat /var/postgres_data_discourse/PG_VERSION
13
所以我认为这个问题确实可以通过这个方法解决 PostgreSQL 15 update - #125 by Vaping_Community
我想让我感到困惑的是,我在 mnt 卷上有多个 postgres_data 文件夹(因为我重新运行了重建),并且没有意识到源文件夹实际上在 /var/ 中。
我今晚晚些时候会尝试一下。
2 个赞
pfaffman
(Jay Pfaffman)
2025 年2 月 25 日 22:06
138
启动一个新的虚拟机并在那里还原备份会容易得多。这样你就完全跳过了PG升级步骤,也不会在新网站正常工作之前破坏旧站点。
8 个赞
chrisc
(Chris Croome)
2025 年3 月 26 日 12:51
140
请注意,UID 会更改!
/launcher enter app
检测到 x86_64 架构。
grep postgres /etc/passwd
postgres:x:101:104:PostgreSQL 管理员,,,:/var/lib/postgresql:/bin/bash
这刚刚让我栽了跟头……
volas
(Alexander V )
2025 年3 月 26 日 18:10
142
是的,对我来说是有效的,但最好使用 OP-post 中的更新说明。
我无法编辑我的帖子来添加注释。
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… 命令,结果出现:
检查集群版本
旧的集群数据和二进制目录来自不同的主要版本。
pfaffman
(Jay Pfaffman)
2025 年4 月 16 日 11:06
145
你的 Docker 版本是多少?你的操作系统版本是多少?我发现迁移到新虚拟机通常更容易。
Docker 版本:28.0.4
Linux 版本:5.15.0-131-generic
pfaffman
(Jay Pfaffman)
2025 年4 月 16 日 13:03
147
您可以在您的 app.yml 中尝试更改为 postgres 13 模板。
那是在容器里面。您是在容器外面查找。
我这样做是为了升级 Discourse,并且成功了,现在我有:
templates:
- "templates/postgres.13.template.yml"
这是否意味着我不能升级 Postgres?
pfaffman
(Jay Pfaffman)
2025 年4 月 16 日 13:29
149
我认为您现在可以将其改回常规模板并重试。我会做的是迁移到一个新的虚拟机,但如果您愿意,也可以再试一次。
我已按照第一个帖子中的说明手动升级了 Postgres,但仍然无法将模板设置回 postgres.template.yml,因为它无法因相同问题重建:
2025-04-16 13:40:07.815 UTC [1888] LOG: 无法打开配置文件 “/etc/postgresql/13/main/pg_hba.conf”:No such file or directory
2025-04-16 13:40:07.815 UTC [1888] FATAL: 无法加载 pg_hba.conf
我将继续使用 13 版本,希望它将来不会出现问题。
谢谢 @pfaffman 。
Firepup650
(Firepup Sixfifty)
2025 年6 月 5 日 02:49
151
正在尝试运行升级,但由于找不到我已确认存在的文件而失败:
日志末尾 + 文件检查
-----------------------------
检查集群版本 ok
*失败*
请参阅“/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'
exec 失败,参数为 {“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 运行于 Thu Jun 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 个赞