我从默认站点升级了 Docker 管理器。升级后,我收到了一条消息,提示需要重新构建应用(launcher rebuild app)。我照做了。随后又收到一条消息,提示 PostgreSQL 已更新,需要再次重新构建。我也照做了。但是,我的默认站点运行正常,而第二个站点却丢失了所有数据。它并非全新实例,但现在只剩下一条系统欢迎帖子。
我尝试将 postgres_data 重命名为 postgres_data_brocken,并将 data_old 重命名为 postgres_data,然后再次尝试重新构建。结果依然相同:提示 PostgreSQL 从版本 15 升级到 18,并需要重新构建应用。但结果依旧没有改善。请帮忙解决。
sudo du -sh shared/standalone/postgres_data_old
678M shared/standalone/postgres_data_old
❯ sudo du -sh shared/standalone/postgres_data_brocken
412M shared/standalone/postgres_data
_brocken
我认为在迁移第二个站点的数据库时,似乎出现了问题。
请确保您有足够的磁盘空间,您需要的空间大约是数据库大小的两倍。抱歉,我没有什么可以补充或帮助的地方,但请查看此线程以获取线索:
警告! 升级需要大量的空闲磁盘空间(数据库大小的 2 倍)。
我们刚刚完成了将 Docker 镜像升级至 PostgreSQL 18 的更改。任何通过命令行重建 Discourse 的网站管理员都将从之前的 PostgreSQL 15 升级至 PostgreSQL 18。请注意,如果您在 2025 年 PostgreSQL 15 更新 发布时 选择暂缓升级,您可以跳过该升级步骤,直接升级至 PostgreSQL 18。
如果您之前暂缓了升级,请将 app.yml 中的 PostgreSQL 模板从 templates/postgres.13.template.yml 更改为 templates/postgres.template.yml。
与任何升级一样,强烈建议在执行任何操作之前进行备份。
区域设置变更
过去,我们在 glibc 更新期间(例如操作系统升级时)曾遇到过索引损坏的问题。自 PostgreSQL 17 起,出现了一种新的 内置区域设置提供程序 ,它与操作系统的 glibc 解耦,因此跨版本更加稳定。作为此次升级的一部分,我们将迁移至使用 …
是的,我已经检查过了,但没有找到关于多站点升级的内容
所以我检查了 PostgreSQL 模板文件。它只针对一个数据库。这太荒谬了。它本应该遍历现有的数据库并对其进行更改。我把这个留在这里,供任何在此场景下寻找解决方案的人参考
DB_LIST=$(su postgres -c "/usr/lib/postgresql/${PG_MAJOR_OLD}/bin/psql -p 5432 -tAc \"select datname from pg_database where not datistemplate and datname != 'postgres'\"")
for DB in $DB_LIST; do
su postgres -c "/usr/lib/postgresql/${PG_MAJOR_OLD}/bin/pg_dump -Fd -j$(nproc --ignore=1) \"$DB\" -f /shared/postgres_dump/\"$DB\""
done