更新失败 (postgresql)

执行最新更新(包括 PostgreSQL)后出现错误:

root@community:/var/discourse# ./launcher rebuild app

确保启动器为最新版本

获取远程仓库

启动器已是最新

停止旧容器

+ /usr/bin/docker stop -t 60 app

app

cd /pups && git pull && /pups/bin/pups --stdin

已是最新。

I, [2020-06-03T15:38:58.391364 #1] INFO -- : 加载 --stdin

I, [2020-06-03T15:38:58.398128 #1] INFO -- : > locale-gen $LANG && update-locale

I, [2020-06-03T15:38:58.731357 #1] INFO -- : 正在生成区域设置(这可能需要一些时间)...

生成完成。

I, [2020-06-03T15:38:58.731849 #1] INFO -- : > mkdir -p /shared/postgres_run

I, [2020-06-03T15:38:58.751775 #1] INFO -- : 

I, [2020-06-03T15:38:58.756078 #1] INFO -- : > chown postgres:postgres /shared/postgres_run

I, [2020-06-03T15:38:58.765806 #1] INFO -- : 

I, [2020-06-03T15:38:58.766148 #1] INFO -- : > chmod 775 /shared/postgres_run

I, [2020-06-03T15:38:58.767966 #1] INFO -- : 

I, [2020-06-03T15:38:58.768305 #1] INFO -- : > rm -fr /var/run/postgresql

I, [2020-06-03T15:38:58.770246 #1] INFO -- : 

I, [2020-06-03T15:38:58.770626 #1] INFO -- : > ln -s /shared/postgres_run /var/run/postgresql

I, [2020-06-03T15:38:58.785523 #1] INFO -- : 

I, [2020-06-03T15:38:58.785863 #1] INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1

2020/06/03 15:38:58 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): 没有那个文件或目录

I, [2020-06-03T15:38:58.911895 #1] INFO -- : 

I, [2020-06-03T15:38:58.912203 #1] INFO -- : > rm -fr /shared/postgres_run/.s*

I, [2020-06-03T15:38:58.914376 #1] INFO -- : 

I, [2020-06-03T15:38:58.914625 #1] INFO -- : > rm -fr /shared/postgres_run/*.pid

I, [2020-06-03T15:38:58.916280 #1] INFO -- : 

I, [2020-06-03T15:38:58.916527 #1] INFO -- : > mkdir -p /shared/postgres_run/12-main.pg_stat_tmp

I, [2020-06-03T15:38:58.917967 #1] INFO -- : 

I, [2020-06-03T15:38:58.918303 #1] INFO -- : > chown postgres:postgres /shared/postgres_run/12-main.pg_stat_tmp

I, [2020-06-03T15:38:58.919709 #1] INFO -- : 

I, [2020-06-03T15:38:58.925728 #1] INFO -- : 文件 > /etc/service/postgres/run 权限:+x 所有者:

I, [2020-06-03T15:38:58.928444 #1] INFO -- : 文件 > /etc/service/postgres/log/run 权限:+x 所有者:

I, [2020-06-03T15:38:58.931357 #1] INFO -- : 文件 > /etc/runit/3.d/99-postgres 权限:+x 所有者:

I, [2020-06-03T15:38:58.934190 #1] INFO -- : 文件 > /root/upgrade_postgres 权限:+x 所有者:

I, [2020-06-03T15:38:58.934528 #1] INFO -- : > chown -R root /var/lib/postgresql/12/main

I, [2020-06-03T15:40:44.749613 #1] INFO -- : 

I, [2020-06-03T15:40:44.750250 #1] INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/12/bin/initdb -D /shared/postgres_data || exit 0

I, [2020-06-03T15:40:44.751653 #1] INFO -- : 

I, [2020-06-03T15:40:44.751914 #1] INFO -- : > chown -R postgres:postgres /shared/postgres_data

I, [2020-06-03T15:40:47.940064 #1] INFO -- : 

I, [2020-06-03T15:40:47.940713 #1] INFO -- : > chown -R postgres:postgres /var/run/postgresql

I, [2020-06-03T15:40:47.942521 #1] INFO -- : 

I, [2020-06-03T15:40:47.942924 #1] INFO -- : > /root/upgrade_postgres

initdb: 警告:为本地连接启用“信任”身份验证

您可以在下次运行 initdb 时通过编辑 pg_hba.conf 或使用选项 -A、

--auth-local 和 --auth-host 来更改此设置。

debconf:由于未安装 apt-utils,延迟软件包配置。

I, [2020-06-03T15:42:45.495966 #1] INFO -- : 将 PostgreSQL 从版本 10 升级到 12

属于此数据库系统的文件将由用户“postgres”所有。

该用户也必须拥有服务器进程。

数据库集群将使用区域设置“en_US.UTF-8”进行初始化。

默认数据库编码已相应设置为“UTF8”。

默认文本搜索配置将设置为“english”。

数据页校验和已禁用。

修复现有目录 /shared/postgres_data_new 的权限 ... 完成

创建子目录 ... 完成

选择动态共享内存实现 ... posix

选择默认 max_connections ... 100

选择默认 shared_buffers ... 128MB

选择默认时区 ... Etc/UTC

创建配置文件 ... 完成

运行引导脚本 ... 完成

执行引导后初始化 ... 完成

将数据同步到磁盘 ... 完成

成功。现在您可以使用以下命令启动数据库服务器:

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

获取:1 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]

命中:2 http://deb.debian.org/debian buster InRelease

获取:3 http://deb.debian.org/debian buster-updates InRelease [49.3 kB]

获取:4 https://deb.nodesource.com/node_10.x buster InRelease [4,584 B]

获取:5 http://apt.postgresql.org/pub/repos/apt buster-pgdg InRelease [84.6 kB]

获取:6 http://security.debian.org/debian-security buster/updates/main amd64 Packages [201 kB]

获取:7 https://deb.nodesource.com/node_10.x buster/main amd64 Packages [768 B]

获取:8 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 Packages [171 kB]

已下载 577 kB,耗时 1 秒(698 kB/s)

正在读取软件包列表...

正在读取软件包列表...

正在构建依赖关系树...

正在读取状态信息...

以下附加软件包将被安装:

postgresql-client-10

建议安装的软件包:

postgresql-doc-10

以下新软件包将被安装:

postgresql-10 postgresql-client-10

0 个升级,2 个新安装,0 个移除,10 个未升级。

需要下载 6,390 kB 的归档文件。

此操作后,将额外使用 30.6 MB 的磁盘空间。

获取:1 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-client-10 amd64 10.13-1.pgdg100+1 [1,428 kB]

获取:2 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-10 amd64 10.13-1.pgdg100+1 [4,961 kB]

已下载 6,390 kB,耗时 0 秒(38.2 MB/s)

选择先前未选中的软件包 postgresql-client-10。

(正在读取数据库 ... 当前已安装 43929 个文件和目录。)

准备解包 .../postgresql-client-10_10.13-1.pgdg100+1_amd64.deb ...

正在解包 postgresql-client-10 (10.13-1.pgdg100+1) ...

选择先前未选中的软件包 postgresql-10。

准备解包 .../postgresql-10_10.13-1.pgdg100+1_amd64.deb ...

正在解包 postgresql-10 (10.13-1.pgdg100+1) ...

正在设置 postgresql-client-10 (10.13-1.pgdg100+1) ...

update-alternatives:警告:强制重新安装替代方案 /usr/share/postgresql/12/man/man1/psql.1.gz,因为链接组 psql.1.gz 已损坏

正在设置 postgresql-10 (10.13-1.pgdg100+1) ...

正在创建新的 PostgreSQL 集群 10/main ...

/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5

属于此数据库系统的文件将由用户“postgres”所有。

该用户也必须拥有服务器进程。

数据库集群将使用区域设置“C.UTF-8”进行初始化。

默认数据库编码已相应设置为“UTF8”。

默认文本搜索配置将设置为“english”。

数据页校验和已禁用。

修复现有目录 /var/lib/postgresql/10/main 的权限 ... 完成

创建子目录 ... 完成

选择默认 max_connections ... 100

选择默认 shared_buffers ... 128MB

选择默认时区 ... Etc/UTC

选择动态共享内存实现 ... posix

创建配置文件 ... 完成

运行引导脚本 ... 完成

执行引导后初始化 ... 完成

将数据同步到磁盘 ... 完成

成功。现在您可以使用以下命令启动数据库服务器:

pg_ctlcluster 10 main start

警告:选定的 stats_temp_directory /var/run/postgresql/10-main.pg_stat_tmp

对集群所有者不可写。未在

postgresql.conf 中添加此设置。

版本 集群 端口 状态 所有者 数据目录 日志文件

10 main 5433 关闭 postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log

update-alternatives:警告:强制重新安装替代方案 /usr/share/postgresql/12/man/man1/postmaster.1.gz,因为链接组 postmaster.1.gz 已损坏

invoke-rc.d:无法确定当前运行级别

invoke-rc.d:policy-rc.d 拒绝了启动执行。

正在处理 postgresql-common (213.pgdg100+1) 的触发器...

从已安装的 myspell/hunspell 软件包构建 PostgreSQL 词典...

正在删除过时的词典文件:

正在停止 PostgreSQL 10 数据库服务器:main。

正在停止 PostgreSQL 12 数据库服务器:main。

执行一致性检查

-----------------------------

检查集群版本 完成

源集群未正常关闭。

失败,正在退出

-------------------------------------------------------------------------------------

POSTGRES 升级失败

请访问 https://meta.discourse.org/t/postgresql-12-update/151236 获取支持

在此期间,您可以运行 ./launcher start app 来重启您的应用

失败

--------------------

Pups::ExecError: /root/upgrade_postgres 失败,返回码为 #<Process::Status: pid 45 exit 1>

失败位置:/pups/lib/pups/exec_command.rb:112:in `spawn'

执行失败,参数为 "/root/upgrade_postgres"

674042fc06e2af0c08a0a09c46406a0b18b1f08b9140e037fffe1053188bd1c0

** 引导失败 ** 请向上滚动并查找更早的错误消息,可能不止一条。

./discourse-doctor 可能有助于诊断问题。

root@community:/var/discourse#

有任何想法吗?

你看过这篇帖子了吗?

是的,我之前做过。我们无法让更新正常运行。

在此处阅读整个常见问题解答部分:

已经尝试过该变通方法,但未奏效。

日志中充满了以下内容:

2020-06-03 16:01:21.074 UTC [693] FATAL: 数据目录 “/shared/postgres_data” 的所有权错误
2020-06-03 16:01:21.074 UTC [693] HINT: 服务器必须由拥有该数据目录的用户启动。

登录容器后,我尝试自行关闭它:

root@community-app:/etc/postgresql/10/main# service postgresql stop

[失败] 停止 PostgreSQL 10 数据库服务器:main[…] 错误:配置所有者(postgres:106)与数据所有者(Debian-exim:105)不匹配,且配置所有者不是 root … 失败!

失败!

在共享目录下进入 Docker 容器后,运行 chown -R postgres postgres_data 命令已解决问题。