Postgres 15 升级遇到问题

您好,
我大概一年后进行了一次更新,这导致了从 pg 13 升级到 15。

我尝试使用我自己的 LC_LANG 运行给出的命令,但它不起作用,我得到了 FATAL: data directory “/shared/postgres_data” does not exist。它确实不存在……有人有什么主意吗?

应该有一个 /shared/postgres_old

更改您的 LC_LANG 可能是个坏主意。

我实际上遇到了和你一样的错误:“/bin/bash: warning: setlocale: LC_ALL: cannot change locale”,这是我在运行 launch rebuild app 时遇到的,最终让我找到了这篇帖子,你最后解决它了吗?如上所述,docker run 命令给我带来了更多问题。

我添加了一个映射 \-v /var/discourse/shared/standalone:/shared,现在有了一些进展。奇怪的是它不在那里。问题可能在于我的“应用”仍然停留在 2024 年的某个版本,并且“重建”不起作用。只是猜测……

所以我的 app.yml 中有这个,它运行正常:

env:
  LC_ALL: fr_BE.UTF-8
  LANG: fr_BE.UTF-8
  LANGUAGE: fr_BE.UTF-8

我指的是 LANG 而不是 LC_LANG。问题是,如果我现在恢复到其他任何设置,就“太晚了”。我尝试了 en_US.UTF_8 没有任何效果,重建总是失败。

如果您没有当前的备份,并且无法重启旧的容器,那么我建议您切换到 PG13 模板并建立一个可用的设置,然后进行备份,接着在新服务器上设置并恢复备份。当数据库为空时,您可以用任何喜欢的语言进行设置,然后进行恢复(也许语言会自动转换?)。

迁移到新服务器可以确保您不会使现有服务器崩溃。

1 个赞

很遗憾,我已处于崩溃状态。我有备份,但我无法恢复它们,因为版本更改太大,并且存在 gem 依赖问题。我也无法恢复到旧版本,因为启动器会自动拉取,我认为这有点令人沮丧。

使用 LC_ALL 我得到:

/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups.rb
/usr/local/bin/pups --stdin
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (fr_BE.UTF-8)
I, [2025-12-02T15:46:29.638999 #1]  INFO -- : Reading from stdin
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/cli.rb:59:in `split’: invalid byte sequence in US-ASCII (ArgumentError)

    split = conf.split("_FILE_SEPERATOR_")
                       ^^^^^^^^^^^^^^^^^^
    from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/cli.rb:59:in `run'
    from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/bin/pups:9:in `<top (required)>'
    from /usr/local/bin/pups:25:in `load'
    from /usr/local/bin/pups:25:in `<main>'

bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
19a63b958021df0ecbc7e21bfea95f1c5ef7b039efd669b5d4af48b05d397a58

如果我删除 LC_ALL,那么“./launcher rebuild app”会停在:

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
Checking for not-null constraint inconsistencies            ok
Creating dump of global objects                             ok
Creating dump of database schemas                           ok

lc_collate values for database “template1” do not match:  old “fr_BE.UTF-8”, new “en_US.UTF-8”

使用帖子顶部提到的“手动”docker 命令,我还必须将 /etc/postgresql 中的内容链接到 /var/…,因为缺少一些文件,最终得到了与上面相同的错误。

我将尝试在新安装中恢复。

我怀疑版本更改太大是事实。您是否设置了新服务器并尝试恢复该备份?我恢复过比站点创建时间早好几年的备份。我相当确定这会奏效。我每月都会将站点迁移到新服务器几次。唯一出现问题的时候是索引损坏,这种情况我已经很久没遇到了。

您是否尝试将 postgres_old 重命名为 postgres_data 并运行

./launcher start app

哦。那是个好主意!这就是我应该在回复前阅读完整帖子的原因。:slight_smile:

我确认新的安装在设置了 LC_ALL 的情况下也会中断,方式与上面显示的一样(\FILE_SEPERATOR\ …)。但是如果没有设置 LC_ALL 就没问题。

我已在新安装的最新 master 版本上恢复了我的保存,谢谢。修复这些问题仍然是个谜……

1 个赞

太棒了!

我已将此内容移至新主题。如果我的回复之一是解决方案,请将其标记,以便此主题可以自动关闭。

2 个赞